Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL Selecione apenas as linhas onde existem vários relacionamentos


Isso se chama Divisão Relacional
SELECT  a.name
FROM    parent a
        INNER JOIN rel b
            ON a.parent_ID = b.parent_ID
WHERE   b.prop_id IN (1,5)
GROUP BY a.name
HAVING COUNT(*) = 2

ATUALIZAÇÃO 1

se restrição exclusiva não foi aplicado em prop_id para cada parent_id , DISTINCT é necessário neste caso.
SELECT  a.name
FROM    parent a
        INNER JOIN rel b
            ON a.parent_ID = b.parent_ID
WHERE   b.prop_id IN (1,5)
GROUP BY a.name
HAVING COUNT(DISTINCT b.prop_id) = 2