我想过滤名称,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语句无法处理多个列.有谁知道如何做到这一点?
只需将列放入括号即可
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条件更快.
| 归档时间: |
|
| 查看次数: |
20659 次 |
| 最近记录: |