MySQL возвращается, не возвращая все записи - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть две таблицы, перечисленные ниже: -

  1. football - 2267 уникальных записей.
  2. football_assets - 2716 уникальных записей.

Теперь я выполняю следующий запрос mysql в phpmyadmin: -

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

Запрос возвращает только 2191 игроков, но он должен дать 2267 записей.Я хочу знать, почему ??

спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Во-первых, 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 с подзапросами.

0 голосов
/ 29 декабря 2018

Полученные результаты показывают, что в football_assets имеется 2267-2191 = 76 записей, чья пара не может быть найдена в футболе.

Вы можете выставить эти записи, изменив IN в своем запросе на NOT IN:

SELECT * 
FROM football_assets 
WHERE pair NOT IN (
    SELECT DISTINCT pair FROM `football`
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...