林有2个表 表1内连接查询为MySQL
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个表 表1内连接查询为MySQL
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
);
这将返回所有行不表2
存在table1的它是,但是值得注意的是,在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;
可能不是最好的选择,但你可以尝试以下查询:
SELECT *
FROM table1
LEFT JOIN table2 ON table2.AnimalName = table1.AnimalName
WHERE table2.AnimalName IS NULL
LEFT JOIN和检查非比赛吗?
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与宠物的所有者相关联。
期望输出的条件是什么?没有明确的条件来过滤输出中的列表。 – Bere
其工作正确的错误,我正在做的是iwas使用左连接,我给了Table1.AnimalName!= Table2.AnimalName 并没有指定“WHERE Table2.ID IS NULL” – vishu