我有三个表要运行不匹配的查询。表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中都没有出现的详细信息,在我忘记之前,为什么我的脚本没有给出正确的结果......我需要从错误中吸取教训......
谢谢
答案 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