Sql server SQL Server 2005-其中不存在,并且不存在内部的复杂脚本
脚本目标:从一个列表中获取一个数字列表,该列表中的数字不会显示在另一个列表中 复杂之处:其他数字列表只能通过一个复杂的脚本获得——出于某种原因,当我知道应该有结果时,我却没有得到结果;因为第一个列表将包含所有数字,而第二个数字列表将只包含一些数字;所以我应该得到一些结果 我写的剧本(删减) 如果我运行part1(在不存在之前),它可以正常工作 如果我运行第2部分(不存在中的数据),它也可以正常工作-结果不同,并且更少(包含第1部分中的数字)Sql server SQL Server 2005-其中不存在,并且不存在内部的复杂脚本,sql-server,sql-server-2005,not-exists,cross-apply,Sql Server,Sql Server 2005,Not Exists,Cross Apply,脚本目标:从一个列表中获取一个数字列表,该列表中的数字不会显示在另一个列表中 复杂之处:其他数字列表只能通过一个复杂的脚本获得——出于某种原因,当我知道应该有结果时,我却没有得到结果;因为第一个列表将包含所有数字,而第二个数字列表将只包含一些数字;所以我应该得到一些结果 我写的剧本(删减) 如果我运行part1(在不存在之前),它可以正常工作 如果我运行第2部分(不存在中的数据),它也可以正常工作-结果不同,并且更少(包含第1部分中的数字) 但在一起,他们没有。所以我需要知道如果不存在我不需要使
但在一起,他们没有。所以我需要知道如果不存在我不需要使用的东西,该怎么做?您说过独立运行的子查询会产生结果。因此,当在
NOT EXISTS
子句中运行时,它将始终生成结果,因此该子句将始终为false
我猜你的意思更像是一个不在(…)中的.Number。你的查询工作正常。由于子查询中存在一些行,因此外部查询没有产生任何结果,但这不是完成目标的正确方法 你的目标 从一个列表中获取一个数字列表,该列表中的数字不会显示在另一个列表中 可以通过两种方式完成 使用
不存在
SELECT A.Number
FROM sometable AS A
INNER JOIN othertable AS B
ON A.Data = B.Data
INNER JOIN othertable2 AS C
ON B.Data = C.Data
INNER JOIN othertable3 AS D
ON C.Data = D.Data
WHERE D.Data = 'int'
AND NOT EXISTS (SELECT 1
FROM sometable AS CC
INNER JOIN anothertable AS BB
ON Cc.Data = BB.Data
INNER JOIN anothertable AS EE
ON BB.Data = EE.Data
INNER JOIN anothertable AS AA
ON EE.Data = AA.Data
CROSS apply (SELECT DG.Data
FROM atable AS DG
WHERE BB.Data = DG.Data) DD
WHERE DD.Data IN ( 'int', 'int', 'int', 'int' )
AND aa.number = a.number)
或者使用不在
SELECT A.Number
FROM sometable AS A
INNER JOIN othertable AS B
ON A.Data = B.Data
INNER JOIN othertable2 AS C
ON B.Data = C.Data
INNER JOIN othertable3 AS D
ON C.Data = D.Data
WHERE D.Data = 'int'
AND A.Number NOT IN (SELECT AA.number
FROM sometable AS CC
INNER JOIN anothertable AS BB
ON Cc.Data = BB.Data
INNER JOIN anothertable AS EE
ON BB.Data = EE.Data
INNER JOIN anothertable AS AA
ON EE.Data = AA.Data
CROSS apply (SELECT DG.Data
FROM atable AS DG
WHERE BB.Data = DG.Data) DD
WHERE DD.Data IN ( 'int', 'int', 'int', 'int' )
AND aa.number = a.number)
如果不存在与子查询一起使用,则子查询使用与外部查询相同的表和别名。这将防止它成为一个相关的子查询,也可能是您的问题的来源。此外,在in列表中具有相同的项也没有任何用处。仅供参考:在EXIST
查询中使用DISTINCT
是无用的。不管查询返回什么,只是行数:零或大于零。子查询中似乎有输入错误。中的某个表作为C另一个表作为B..
应该是。某个表作为C内部联接,另一个表作为B..
内部联接丢失。我使用的方式不正确,这是整个问题所在。我想我现在明白了。PM 77-1的回答对我来说很有意义@NoDisplayName-两个查询中的表不相同;但数据是可比的。我试图从真实的版本简化。我确实错过了演示脚本中不存在的内部连接声明;但不是真的,谢谢!我想我明白为什么这会起作用而我的不会。我试试看。
SELECT A.Number
FROM sometable AS A
INNER JOIN othertable AS B
ON A.Data = B.Data
INNER JOIN othertable2 AS C
ON B.Data = C.Data
INNER JOIN othertable3 AS D
ON C.Data = D.Data
WHERE D.Data = 'int'
AND A.Number NOT IN (SELECT AA.number
FROM sometable AS CC
INNER JOIN anothertable AS BB
ON Cc.Data = BB.Data
INNER JOIN anothertable AS EE
ON BB.Data = EE.Data
INNER JOIN anothertable AS AA
ON EE.Data = AA.Data
CROSS apply (SELECT DG.Data
FROM atable AS DG
WHERE BB.Data = DG.Data) DD
WHERE DD.Data IN ( 'int', 'int', 'int', 'int' )
AND aa.number = a.number)