Предположим, у меня есть две связанные таблицы parents
и children
с отношением «один ко многим» (один parent
для многих children
). Обычно, когда мне нужно обработать информацию об этих таблицах вместе, я сделать запрос, такие как следующие (как правило, с пунктом WHERE
добавлен в):В SQL, как я могу выбрать всех родителей, у которых есть дети?
SELECT * FROM parents INNER JOIN children ON (parents.id = children.parent_id);
Как я могу выбрать все parents
, которые имеют по крайней мере один child
не теряя времени, соединяя все children
с их parents
?
Я думал использовать какой-то OUTER JOIN
, но я не уверен, что с ним делать.
(Обратите внимание, что я задаю этот вопрос, как правило, так не дают мне ответ, который привязан к конкретной реализации СУБД, если нет общего решения.)
Выполняйте 'LEFT JOIN' и фильтруйте на некотором дочернем поле (например, имя) как' NOT NULL'. Чтобы иметь каждого родителя только один раз, вам нужно будет использовать DISTINCT или (если это имеет смысл), 'GROUP BY'. –
@ PM77-1 Спасибо! Я получил его работу с 'GROUP BY', я не уверен, как использовать DISTINCT. Кроме того, можете ли вы опубликовать это как ответ? – Matt