查询以计算与2个表不同的记录

时间:2016-07-14 18:25:39

标签: sql sql-server

我有一个SRC表和STG表,两个表都有一个名为BU的公共字段。我编写了以下查询来计算来自SRC表的记录,其中两个表中的BU和MU都不匹配:

select COUNT (*) from [dbo].[SRC]
    where ( select Name from [dbo].[SRC] t1, [dbo].[STG] t2 
    where t1.BU <> t2.BU and t1.MU <> t2.MU)

3 个答案:

答案 0 :(得分:0)

使用left join

select COUNT (*) 
from [dbo].[SRC] t1 
left join [dbo].[STG] t2 on t1.BU = t2.BU
where t2.BU is null

请参阅this great explanation of joins

答案 1 :(得分:0)

您可以使用左连接和NOT IN功能来获取输出。

order.order_id, order.date, name (for customer), name (for salesperson)

答案 2 :(得分:0)

我认为您希望在IDBU不匹配的MU找到匹配项。你离开了那个问题,所以我在你的一些评论之间进行了阅读。我怀疑你也只想看到那些计数大于零的人。如果BUMU列中的任何一列可以为空,那么您需要小心这些(例如COALESCE(SRC.BU, '!@#$%') <> COALESCE(STG.BU, '!@#$%')。)

select ID, count(STG.ID) as CountDissimilar
from
    dbo.SRC left outer join dbo.STG
        on STG.ID = SRC.ID and STG.BU <> SRC.BU and SRC.MU <> SRC.MU
group by SRC.ID
having count(STG.ID) > 0