SQL Select only rows where multiple relationships exist

后端 未结 4 1108
北荒
北荒 2020-12-10 12:29

Given a parent table \'parent\'

╔═══════════╦══════════╗
║ PARENT_ID ║   NAME   ║
╠═══════════╬══════════╣
║         1 ║ bob      ║
║         2 ║ carol    ║
         


        
4条回答
  •  庸人自扰
    2020-12-10 13:05

    This is called Relational Division

    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
    
    • SQLFiddle Demo Link

    UPDATE 1

    if unique constraint was not enforce on prop_id for every parent_id, DISTINCT is needed on this case.

    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
    

提交回复
热议问题