una todas solo seleccionar mostrar menos las excluir excepto dato columnas columna campo algo sql select mysql one-to-many

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