MySQL:从表A中选择,表B中不存在

时间:2017-10-30 16:29:13

标签: mysql

我正在尝试为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

所以我只想要TableA中不存在于TableB中的字段

Result
1,2,1
1,5,1

我尝试了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

我也试过NOT IN,但不知道如何用3个字段做到这一点。

我知道这一定很简单,但我是盲目的。糟糕的一天:(

4 个答案:

答案 0 :(得分:6)

使用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)

使用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

修改

我只是在类似的排名another way using 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
);

答案 1 :(得分:0)

您可以尝试连接字段,然后一次比较所有字段

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)
) 

答案 2 :(得分:0)

尝试使用此查询:

select * from TableA where (fieldA,fieldB,fieldC) not in (select * from TableB);

答案 3 :(得分:0)

使用左连接左相关表的列不匹配返回空值,因此只过滤左表列,其中为null

  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
  AND ( b.fieldC is null  OR b.fieldA is null OR a.fieldB is null)

或者您可以将NOT IN用于相同的条件

  SELECT a.fieldA, a.fieldB, a.fieldC
  FROM TableA a 
  WHERE a.fieldA = 1 
  AND a.fieldC = 1
  AND (a.fieldA, a.fieldB, a.fieldC) NOT IN (
    SELECT b.fieldA, b.fieldB, b.fieldC
    FROM TableB b
    WHERE b.fieldA = 1 
    AND b.fieldC = 1
  )