0

スクリプトの目的: 数字が別のリストに表示されないリストから数字のリストを取得します。

複雑さ: 数字の他のリストは、複雑なスクリプトを介してのみ取得できます。何らかの理由で、あるべきだとわかっているときに結果が得られません。最初のリストにはすべての数値が含まれ、2 番目の数値リストには一部の数値のみが含まれます。そうすれば、何らかの結果が得られるはずです。

私が書いたスクリプト(検閲済み)

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 DISTINCT A.Number
                       FROM   sometable AS C
                              anothertable AS B
                                      ON C.Data = B.Data
                              INNER JOIN anothertable AS E
                                      ON B.Data = E.Data
                              INNER JOIN anothertable AS A
                                      ON E.Data = A.Data
                              CROSS apply (SELECT DG.Data
                                           FROM   atable AS DG
                                           WHERE  B.Data = DG.Data) D
                       WHERE  D.Data IN ( 'int', 'int', 'int', 'int' )) 

(存在しない前に) part1 を実行すると、正常に動作します

part2 (存在しないデータ内のデータ) を実行すると、正常に動作します - 異なる、より少ない結果 (part1 からの数値を含む)

しかし、一緒ではありません。存在しない場合は、これを行う方法を知る必要があります。使用する必要はありませんか?

4

2 に答える 2

0

あなたは、独立して実行されるサブクエリが結果を生成すると言いました。したがって、NOT EXISTS句で実行すると、常に結果が生成されるため、句は常に false になります。

私の推測では、あなたが意味したのは、より多くの線に沿っているということですWHERE A.Number NOT IN ( ... )

于 2014-12-28T05:12:39.290 に答える
0

クエリは正常に機能しています。サブクエリにいくつかの行が存在するため、外側のクエリは結果を生成しませんでしたが、それは目的を達成する正しい方法ではありません

あなたの目的

番号が別のリストに表示されないリストから番号のリストを取得します。

2つの方法で行うことができます。

使用するNot Exists

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)

または使用してNot IN

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) 
于 2014-12-28T05:37:03.230 に答える