不匹配3个表的SQL查询

时间:2015-02-12 12:45:01

标签: sql sql-server

我有三个表要运行不匹配的查询。表1是我的主表,表2和表3是每天都添加记录的表。

现在,结果需要向我展示表1中没有的内容(异常报告)

现在我编写了一个脚本,它只查询2个表,但它无法正常工作。因为表1包含8277436条记录,当我执行脚本时,结果是8620530 ??????我在某个地方出错了。

下面的脚本

Select distinct ID_NUMBER, CLIENT_CODE 
from [KAMLS].[dbo].[Retail]
Left Join [22AE5D15].[dbo].[Documents1]
on [KAMLS].[dbo].[Retail].ID_NUMBER  NOT LIKE '%' + [22AE5D15].[dbo].[Documents1].B61DDE99 + '%' 

表1 [KAMLS]。零售     ID_Number Client_Code

Table 2 [22AE5D15].Documents1
B61DDE99 = ID Number

Table 3 [22AE5D16].Documents 2
ID_Number

结果我正在寻找的是表1中的所有文件[KAMLS]。表2和表3中都没有出现的详细信息,在我忘记之前,为什么我的脚本没有给出正确的结果......我需要从错误中吸取教训......

谢谢

3 个答案:

答案 0 :(得分:1)

根据我之前回答的评论,这应该会给你想要的结果:

DECLARE @Table1 TABLE (ID_NUMBER INT)
DECLARE @Table2 TABLE (ID_NUMBER INT)
DECLARE @Table3 TABLE (ID_NUMBER INT)

INSERT INTO @Table1 VALUES (1),(2),(3),(4),(5),(6)
INSERT INTO @Table2 VALUES (1),(2),(3)
INSERT INTO @Table3 VALUES (1),(4),(5)
;

WITH NotInTable2OrTable3 AS
(
    SELECT ID_NUMBER FROM @Table1
    EXCEPT
    (
        SELECT ID_NUMBER FROM @Table2
        UNION ALL
        SELECT ID_NUMBER FROM @Table3
    )
)

SELECT * FROM NotInTable2OrTable3

答案 1 :(得分:0)

您的脚本不适合您的原因是您将Table1中的每一行与Table2中的每一行进行比较,并且每次它们彼此不相似时都会加入。对于您的方案,这不是非常有价值的信息,因为如果您有' abc'在表1中,这不像是' 123'或者' 456'或者' 789'所以你要将3条记录加入' abc'它并没有告诉你是否' abc'是否在表2中。

你可以通过多种方式做你想做的事。发布的cte将起作用,但我只是对两个表使用左连接,并在连接为空的情况下获取结果。

select ID_NUMBER from Table1 t1
left join Table2 t2
    on t1.ID_NUMBER = t2.ID_NUMBER
left join Table3 t3
    on t1.ID_NUMBER = t3.ID_NUMBER
where t2.ID_NUMBER is null
    and t3.ID_NUMBER is null

答案 2 :(得分:0)

我想你想要这样的东西。它会返回table2中与table1中的id不匹配的所有ID,以及table3中与table1中的id不匹配的所有ID。

select table2.id from table2
    left join table1 on table1.id=table2.id
    WHERE table1.id IS NULL
UNION ALL
select table3.id from table3
    left join table1 on table1.id=table3.id
    WHERE table1.id IS NULL