我有 2 个表 Table1
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
我有 2 个表 Table1
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
我想你正在寻找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
通常性能优于,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;
这可能不是最佳选择,但您可以尝试以下查询:
SELECT *
FROM table1
LEFT JOIN table2 ON table2.AnimalName = table1.AnimalName
WHERE table2.AnimalName IS NULL
左加入并检查不匹配?
SELECT
FROM Table1 a
LEFT OUTER JOIN Table2 b
ON a.ID = b.ID
AND a.AnimalName = b.AnimalName
WHERE B.ID IS NULL
由于您的问题并未准确说明,我只能通过提供的数据进行猜测。如何获得第一个表中而不是第二个表中的所有动物的列表。
对要比较的表进行左连接,并检查第二个表中的 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
我正在对两列进行左连接,因为谁知道数据的质量,并且有多个动物名称相同,但 ID 不同……例如与宠物主人关联的 ID。