MySQL返回不返回所有记录

时间:2018-12-29 09:44:19

标签: mysql sql xampp

我下面列出了两个表格:-

  1. 足球-它具有2267条独特记录。
  2. football_assets-它具有2716个唯一记录。

现在我正在phpmyadmin中运行以下mysql查询:-

select * from football_assets where pair in (SELECT DISTINCT pair FROM `football`);

查询仅返回2191个玩家,但应给出2267条记录。我想知道为什么吗?

提前谢谢。

2 个答案:

答案 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 existsleft 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使用子查询。