Как выбрать родительскую строку, только если имеет по крайней мере одного ребенка?

У меня есть простая связь "один ко многим". Я хотел бы выбрать строки из родителя только, когда у них есть по крайней мере один ребенок. Так, при отсутствии детей, то родительская строка не возвращается в наборе результатов.

Например.

Parent:
+--+---------+
|id|   text  |
+--+---------+
| 1|  Blah   |
| 2|  Blah2  |
| 3|  Blah3  |
+--+---------+

Children
+--+------+-------+
|id|parent| other |
+--+------+-------+
| 1|   1  | blah  |
| 2|   1  | blah2 |
| 3|   2  | blah3 |
+--+------+-------+

Я хочу, чтобы результаты были:

+----+------+
|p.id|p.text|
+----+------+
|  1 | Blah |
|  2 | Blah2|
+----+------+
15
задан Matt McCormick 3 April 2010 в 16:15
поделиться

4 ответа

Вы можете сделать это, используя EXISTS , например так:

SELECT *
FROM Parent p
WHERE EXISTS (SELECT 1
              FROM Chilren c
              WHERE c.Parent = p.id)

Или используя IN , как это :

SELECT *
FROM Parent p
WHERE p.id IN (SELECT c.Parent
               FROM Chilren c)
19
ответ дан 1 December 2019 в 01:38
поделиться

Внутреннее соединение возвращает только строки, соответствующие обеим таблицам:

select distinct p.*
from Parent p
inner join Children c on c.parent = p.id
12
ответ дан 1 December 2019 в 01:38
поделиться
Select p.id, p.text
from Parent p
inner join Children c on p.id = c.parent 
group by p.id, p.text
2
ответ дан 1 December 2019 в 01:38
поделиться
SELECT p.*
FROM Parent p
WHERE EXISTS (SELECT 'X' FROM Children c WHERE c.parent = p.id);
1
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: