簡體   English   中英

多列的SQL“IN”語句

[英]SQL “IN” statement for multiple columns

我想過濾名稱,X組合永遠不是X = Y讓我們假設下表:

*Name*     *X*      *Y*
   A        2        1
   A        2        2   <--- fulfills requirement for Name=A, X=2
   A       10        1
   A       10        2
   B        3        1
   B        3        3   <--- fulfills requirement for Name=B, X=3
   B        1        1   <--- fulfills requirement for Name=B, X=1
   B        1        3

所以我想返回組合Name = A,X = 10,其中X = Y永遠不為真。 這是我的方法(在語法上不正確)

SELECT * 
FROM TABLE 
WHERE NAME
     , X NOT IN (SELECT DISTINCT NAME
                       , X 
                 FROM TABLE 
                 WHERE X=Y)

我的問題是where語句無法處理多個列。 有誰知道如何做到這一點?

只需將列放入括號即可

SELECT * 
FROM TABLE 
WHERE (NAME, X) NOT IN (SELECT NAME, X 
                        FROM TABLE WHERE X=Y);

以上是ANSI標准SQL,但並非所有DBMS都支持此語法。

INNOT IN的子查詢不需要使用distinct

但是,具有共同相關子查詢的NOT EXISTS通常比NOT IN條件更快。

我認為你可以使用兩個條件來實現這一目標

SELECT * 
FROM TABLE 
WHERE NAME NOT IN(
    SELECT a.NAME FROM TABLE a WHERE a.X=a.Y
) AND X NOT IN (
    SELECT b.X FROM TABLE b WHERE b.X=b.Y
)
SELECT * 
FROM TABLE T 
WHERE NOT EXISTS (SELECT NAME
                  ,X 
              FROM TABLE t2 
              WHERE t1.Name=t2.Name
                    AND t1.X=t2.Y)

這將檢查是否有這樣的記錄

我在SQL Server上使用它

SELECT * 
FROM TABLE 
WHERE (SELECT NAME + ';' + X)
    NOT IN (SELECT NAME + ';' + X
        FROM TABLE WHERE X = Y);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM