我下面列出了两个表格:-
现在我正在phpmyadmin中运行以下mysql查询:-
select * from football_assets where pair in (SELECT DISTINCT pair FROM `football`);
查询仅返回2191个玩家,但应给出2267条记录。我想知道为什么吗?
提前谢谢。
答案 0 :(得分:0)
您得到的结果表明,football_assets中有2267-2191 = 76条记录,在足球中找不到该对。
您可以通过将查询中的IN更改为NOT IN来展示这些记录:
SELECT *
FROM football_assets
WHERE pair NOT IN (
SELECT DISTINCT pair FROM `football`
);
答案 1 :(得分:0)
首先,select distinct
在子查询中是多余的。 WHERE
子句不会更改行数。因此,您应该写:
select fa.*
from football_assets fa
where fa.pair in (select f.pair from football f);
很显然,您有一些不在两个表中的对。我强烈建议您使用not exists
或left join
/ where
来找到它们:
select fa.*
from football_assets fa
where not exists (select 1 from football f where fa.pair = f.pair);
请勿使用not in
。即使pair
中的NULL
的单个值为football
,也不会返回任何行。这是因为NULL
在SQL中的工作方式。因此,我强烈不建议not in
使用子查询。