sql - todas - ¿Cómo seleccionar la fila padre solo si tiene al menos un hijo?
seleccionar todo menos algo sql (4)
Tengo una relación sencilla de uno a muchos. Me gustaría seleccionar filas del padre solo cuando tienen al menos un hijo. Entonces, si no hay hijos, entonces la fila principal no se devuelve en el conjunto de resultados.
P.ej.
Parent:
+--+---------+
|id| text |
+--+---------+
| 1| Blah |
| 2| Blah2 |
| 3| Blah3 |
+--+---------+
Children
+--+------+-------+
|id|parent| other |
+--+------+-------+
| 1| 1 | blah |
| 2| 1 | blah2 |
| 3| 2 | blah3 |
+--+------+-------+
Quiero que los resultados sean:
+----+------+
|p.id|p.text|
+----+------+
| 1 | Blah |
| 2 | Blah2|
+----+------+
Puedes hacer esto usando un EXISTS
, como este:
SELECT *
FROM Parent p
WHERE EXISTS (SELECT 1
FROM Chilren c
WHERE c.Parent = p.id)
O usando una IN
como esta:
SELECT *
FROM Parent p
WHERE p.id IN (SELECT c.Parent
FROM Chilren c)
Una inner join
solo devuelve filas que coinciden con ambas tablas:
select distinct p.*
from Parent p
inner join Children c on c.parent = p.id
SELECT p.*
FROM Parent p
WHERE EXISTS (SELECT ''X'' FROM Children c WHERE c.parent = p.id);
Select p.id, p.text
from Parent p
inner join Children c on p.id = c.parent
group by p.id, p.text