[英]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都支持此語法。
IN
或NOT 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.