Поиск всех записей без связанных - PullRequest
11 голосов
/ 22 августа 2009

У меня есть таблица команд и таблица игроков, и я хочу найти все команды, с которыми не связаны игроки. Таблица игроков связана через столбец team_id. Для этого я использую Ruby on Rails, поэтому у меня есть команда и модель игрока.

Ответы [ 4 ]

17 голосов
/ 22 августа 2009

Может лучше работать при левом соединении:

SELECT
teams.*
FROM teams
LEFT JOIN players ON (teams.id = players.team_id)
WHERE
players.team_id IS NULL

Или используя ARel (благодаря комментарию JasonKing):

Team.includes(:players).where('players.team_id IS NULL')
4 голосов
/ 22 августа 2009

Примерно так:

select * from teams
where id not in (select distinct team_id from players)
1 голос
/ 22 августа 2009

Как правило, вы должны иметь возможность выполнять внешнее соединение от родителя к потомку и проверять нулевое значение в поле в дочернем элементе, которое не может быть пустым. Как правило, это быстрее, чем «не в» или «не существует». Это может работать не на всех базах данных.

1 голос
/ 22 августа 2009

Вы бы сделали это с условием NOT EXISTS, например:

SELECT *
FROM teams
WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...