Подтвердить что ты не робот

Поиск всех записей без связанных с ними

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

4b9b3361

Ответ 1

Он может лучше выполнять левое соединение:

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')

Ответ 2

Что-то вроде этого:

select * from teams
where id not in (select distinct team_id from players)

Ответ 3

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

Ответ 4

Вы сделали бы это с условием NOT EXISTS следующим образом:

SELECT *
FROM teams
WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)