美好的一天,我
有一个要求:
select distinct n.ACCOUNTANCY_ID
from NC n
where n.DEVICE_ID in (
select d.ID
from DEVICES d
where d.PROPOSAL_ID in (
select distinct(ct.PROPOSAL_ID)
from CROSS_T ct
where ct.CONTRACT_ID in (
select ct.CONTRACT_ID
from CROSS_T ct
where ct.PROPOSAL_ID in (
select ct.PROPOSAL_ID
from CROSS_T ct
where ct.CONTRACT_ID = 49
) and ct.CONTRACT_ID is not null
)
) and d.IN_ACCOUNTANCY = 2 and d.DEVICES_CL_ID <> -1
)
它返回ACCOUNTANCY表中的行ID列表,但该表可能没有包含所有ID的行(由查询生成)。问题:
如何找出ID不在“ACCOUNTANCY”表中的行数?
感谢你的回答。
PS:
最平庸的解决方案是发出 2 个请求,第一个:请求 - 如上所示,第二个:请求:
select count(distinct a.ACT_NUMBER)
from ACCOUNTANCY a
where a.ID in (‘запрос который представлен выше’)
然后做减法......但这似乎不太正确。
例如,可以进行某种“左连接”,但表的结果和查询的结果并不是很“连接”。
几乎可以肯定,整个梯子可以用 JOIN 重写,而无需 DISTINCT 语句。
回答问题,让这个复杂查询的结果是某种
t带有字段的表accountancy_id在这种情况下,要找出
accountancy_id表中缺少的元素数量accountancy,我们使用以下查询:RIGHT JOIN选择表中的所有元素,t并且只选择表中匹配的元素accountancy。因此,将有 NULL 值而不是不适当的值SQLFiddle上的示例
可以这样输入请求: