多列的SQL"IN"语句

use*_*374 3 sql distinct

我想过滤名称,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
Run Code Online (Sandbox Code Playgroud)

所以我想返回组合Name = A,X = 10,其中X = Y永远不为真.这是我的方法(在语法上不正确)

SELECT * 
FROM TABLE 
WHERE NAME
     , X NOT IN (SELECT DISTINCT NAME
                       , X 
                 FROM TABLE 
                 WHERE X=Y)
Run Code Online (Sandbox Code Playgroud)

我的问题是where语句无法处理多个列.有谁知道如何做到这一点?

a_h*_*ame 8

只需将列放入括号即可

SELECT * 
FROM TABLE 
WHERE (NAME, X) NOT IN (SELECT NAME, X 
                        FROM TABLE WHERE X=Y);
Run Code Online (Sandbox Code Playgroud)

以上是ANSI标准SQL,但并非所有DBMS都支持此语法.

distinct对于IN或的子查询,A 不是必需的NOT IN.

然而,NOT EXISTS与共同相关的子查询通常比NOT IN条件更快.