0

変更を加えなければならない非常に大きな SQL ステートメントがあります。テーブルの 1 つに 4 つの int 列があり、2 つのセットを除外する必要があります。1 つのテーブルの値を除外するだけの場合は、except ステートメントを使用すると非常に簡単です。私がすることができます:

select *
from Table Z
except(
select *
from Table Z
where (A= 2 and B= 10 and C= 3 and D= 90) 
or (A= 2 and B= 17 and C= 100 and D= 90))

ただし、whereステートメントを使用して機能させることはできません。これら 2 つの組み合わせのセットを除外するだけです。実際のステートメントには、6 つの異なるテーブルとの結合と、select 内のすべての種類の case ステートメントがあります。

私はいくつかのことを試しましたが、何もうまくいかないようです。

どんなアイデアでも大歓迎です!

ありがとう!

4

5 に答える 5

4

なぜ複雑なのEXCEPTですか?これは機能しませんか?:

SELECT  *
FROM Table Z
WHERE NOT (  ( A= 2 and B= 10 and C= 3 and D= 90) 
          OR ( A= 2 and B= 17 and C= 100 and D= 90)
          )
于 2012-05-21T15:43:40.857 に答える
1

単純にNOT演算子を使用します。

SELECT * 
  FROM Table Z 
 WHERE NOT ((A = 2 and B = 10 and C = 3 and D = 90)  
            OR (A = 2 and B = 17 and C = 100 and D = 90))

または、ド・モルガンの法則を適用すると、

SELECT * 
  FROM Table Z 
 WHERE (NOT (A = 2 and B = 10 and C = 3 and D = 90))
   AND (NOT (A = 2 and B = 17 and C = 100 and D = 90))
于 2012-05-21T15:44:16.347 に答える
0

次の 2 つの方法があります。

SELECT * FROM TABLE Z 
    WHERE Z.ID NOT IN 
    (SELECT ID FROM TABLE Z WHERE (A= 2 AND B= 10 AND C= 3 AND D= 90) OR (A= 2 AND B= 17 AND C= 100 AND D= 90))

この 2 番目の方法は、パフォーマンスが少し向上する可能性があります... NOT IN は問題になる可能性があります。

SELECT * FROM TABLE Z
    LEFT JOIN TABLE Z2
    ON 
    Z.Id = Z2.ID
    WHERE (Z2.A= 2 AND Z2.B= 10 AND Z2.C= 3 AND Z2.D= 90) OR (Z2.A= 2 AND Z2.B= 17 AND Z2.C= 100 AND Z2.D= 90)) WHERE Z2 IS NOT NULL

2番目のものに注目してください...私はそれについて100%確信が持てません. 最初に最初のものを試し、パフォーマンスに問題がある場合にのみ 2 番目のものを使用します。

于 2012-05-21T15:44:37.883 に答える
0

これにより、クエリ例と同じ結果が得られ、必要な SELECT ステートメントは 1 つだけです。

SELECT *
FROM Table_Z
WHERE NOT (A= 2 and B= 10 and C= 3 and D= 90) 
   AND NOT (A= 2 and B= 17 and C= 100 and D= 90)
于 2012-05-21T15:47:45.180 に答える
0

NOT IN などを試してください

SELECT * FROM Table1 WHERE Table1.ID NOT IN (SELECT ID FROM Table1 WHERE Somewhereclause)

あなたの場合:

select *
from Table Z
WHERE Z.ID NOT IN (
select ID
from Table Z
where (A= 2 and B= 10 and C= 3 and D= 90) 
or (A= 2 and B= 17 and C= 100 and D= 90))
于 2012-05-21T15:43:21.703 に答える