我试图为MySQL编写一个SELECT语句,该语句从表A中选择表B中不存在的内容。大多数示例只使用一个字段作为键。在我的例子中,我有三个字段。
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所以我只想要TableA中不存在于TableB中的字段
Result
1,2,1
1,5,1我试着离开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我也尝试过没有在,但不知道如何用3个字段。
我知道这一定很简单,但我是瞎子。糟糕的一天:
发布于 2017-10-30 16:55:27
使用NOT :
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)使用左联接的 :
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编辑
我刚在一个类似的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
);发布于 2017-10-30 16:37:36
您可以尝试将字段连接起来,然后将它们同时进行比较。
SELECT a.fieldA, a.fieldB, a.fieldC
FROM TableA a
LEFT JOIN TableB b ON (
CONCAT(a.fieldA,a.fieldB,a.fieldC) <> CONCAT(b.fieldA,b.fieldB,b.fieldC)
) 发布于 2017-10-30 16:54:44
尝试这个查询,它可以工作:
select * from TableA where (fieldA,fieldB,fieldC) not in (select * from TableB);https://stackoverflow.com/questions/47020056
复制相似问题