Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2005-其中不存在,并且不存在内部的复杂脚本_Sql Server_Sql Server 2005_Not Exists_Cross Apply - Fatal编程技术网

Sql server SQL Server 2005-其中不存在,并且不存在内部的复杂脚本

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部分中的数字) 但在一起,他们没有。所以我需要知道如果不存在我不需要使

脚本目标:从一个列表中获取一个数字列表,该列表中的数字不会显示在另一个列表中

复杂之处:其他数字列表只能通过一个复杂的脚本获得——出于某种原因,当我知道应该有结果时,我却没有得到结果;因为第一个列表将包含所有数字,而第二个数字列表将只包含一些数字;所以我应该得到一些结果

我写的剧本(删减)

如果我运行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)