我有2张桌子 表1
ID AnimalNAme
1 Dog1
1 Dog2
2 cat1
3 Cow1
3 Cow2
4 Rat1
4 Rat2
表2
ID AnimalNAme
1 Dog1
2 cat1
3 Cow1
4 Rat2
我需要输出
1 Dog2
3 Cow2
4 Rat1
答案 0 :(得分:3)
我认为您正在寻找NOT EXISTS
:
SELECT ID, AnimalName
FROM Table1
WHERE NOT EXISTS
( SELECT 1
FROM Table2
WHERE Table1.ID = Table2.ID
AND Table1.AnimalName = Table2.AnimalName
);
这将返回table1中表2中不存在的所有行。
但值得注意的是,在MySQL LEFT JOIN/IS NULL
generally performs better而不是NOT EXISTS
,并且具有相同的效果。通过声明OUTERTABLE.Column IS NULL
您将查询限制为外表中没有相应项的行。
SELECT Table1.ID, Table1.AnimalName
FROM Table1
LEFT JOIN Table2
ON Table1.ID = Table2.ID
AND Table1.AnimalName = Table2.AnimalName
WHERE Table2.ID IS NULL;
<强> Example on SQL Fiddle 强>
答案 1 :(得分:1)
这可能不是最佳选择,但您可以尝试以下查询:
SELECT *
FROM table1
LEFT JOIN table2 ON table2.AnimalName = table1.AnimalName
WHERE table2.AnimalName IS NULL
答案 2 :(得分:1)
左连接并检查不匹配?
SELECT
FROM Table1 a
LEFT OUTER JOIN Table2 b
ON a.ID = b.ID
AND a.AnimalName = b.AnimalName
WHERE B.ID IS NULL
答案 3 :(得分:1)
由于您的问题没有准确说明,我只能通过提供的数据进行猜测。如何获得第一张表中而不是第二张表中所有动物的列表。
对要比较的表执行左连接,并在第二个表中检查NULL。
select
t1.id,
t1.animalName
from
Table1 t1
left join table2 t2
on t1.id = t2.id
AND t1.animalName = t2.animalName
where
t2.id IS NULL
我正在BOTH列上进行左连接,因为谁知道数据的质量并且具有相同名称的多个动物名称,但是在不同的ID下...例如与宠物所有者相关联的ID。