最终结果不应包括ID24,因为此id具有与公司层次结构的活动Map:1176->1781->1787,并且1787在第二个表中处于活动状态。我尝试的查询无法获得所需的结果。
样本数据:
Table 1 #tempCTE_CompMCompDir:
Id CompanyId ChildId
24 1776 1781
24 1776 1782
25 1777 1783
24 1781 1786
24 1781 1787
Table 2 #tempContComM:
CompanyId ContactId IsActive
1787 2903 1
1783 2903 0
1778 2903 0
1786 2903 0
输入:
表1有分层的数据公司和子公司。
表2显示了叶级公司的isactive true或false。
输出:
从表1中获取所有ID
如果表1中的公司id或子id通过层次结构Map到表2的公司id,并且此Map的isactive在所有情况下都为false。
样本数据的输出应为:
Id
25
输出错误的查询是:
SELECT CTE_CompMCompDir.Id
FROM #tempCTE_CompMCompDir CTE_CompMCompDir
JOIN #tempContComM tempContComM
ON ( CTE_CompMCompDir.CompanyId = tempContComM.CompanyId
AND tempContComM.IsActive = 0)
OR ( CTE_CompMCompDir.ChildId = tempContComM.CompanyId
AND tempContComM.IsActive = 0)
2条答案
按热度按时间bhmjp9jg1#
如果您只在第二个表中查找具有所有false isactive值的所有子行条目,则可能的解决方案
现场演示链接
注意事项:
我将缺少的Map值视为既不是false也不是true
你可以调整max(case..)来改变你的规则和标准
xj3cbfub2#
此查询将companyid或childid与isactive=1的原始值匹配的所有#tempcteŠcompmcompdir.id丢弃到第二个表中;这就是我对你想要达到的目标的理解