我正在尝试为MySQL编写一个SELECT语句,它从表A中选择表B中不存在的内容.大多数示例只使用一个字段作为键.在我的情况下,我有3个字段.
TableA => a.fieldA, a.fieldB, a.fieldC
1,1,1
1,2,1
1,3,1
1,4,1
1,5,1
TableB => b.fieldA, b.fieldB, b.fieldC
1,1,1
1,3,1
1,4,1
Run Code Online (Sandbox Code Playgroud)
所以我只想要TableA中不存在TableB中的字段
Result
1,2,1
1,5,1
Run Code Online (Sandbox Code Playgroud)
我试过LEFT JOIN,但没有运气
SELECT a.fieldA, a.fieldB, a.fieldC
FROM TableA a
LEFT JOIN TableB b ON (
a.fieldA = b.fieldA
AND a.fieldB = b.fieldB
AND a.fieldC = b.fieldC)
WHERE a.fieldA = 1
AND a.fieldC = 1
Run Code Online (Sandbox Code Playgroud)
我也试过NOT IN,但不知道如何用3个字段做到这一点.
我知道这一定很简单,但我是盲目的.糟糕的一天 :(
使用NOT IN:
SELECT a.fieldA, a.fieldB, a.fieldC
FROM tableA a
WHERE (a.fieldA, a.fieldB, a.fieldC) NOT IN (
SELECT b.fieldA, b.fieldB, b.fieldC
FROM tableB b)
Run Code Online (Sandbox Code Playgroud)
使用LEFT JOIN:
SELECT a.fieldA, a.fieldB, a.fieldC
FROM tableA a
LEFT JOIN tableB b ON (
a.fieldA = b.fieldA
AND a.fieldB = b.fieldB
AND a.fieldC = b.fieldC)
WHERE b.fieldA IS NULL
Run Code Online (Sandbox Code Playgroud)
编辑
我只是使用NOT EXISTS以类似的方式找出另一种方式
SELECT a.fieldA, a.fieldB, a.fieldC
FROM tableA a
WHERE NOT EXISTS (
SELECT 1
FROM tableB b
WHERE a.fieldA = b.fieldA
AND a.fieldB = b.fieldB
AND a.fieldC = b.fieldC
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |