Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Select only rows where exact multiple relationships exist

Tags:

sql

mysql

This is closely related to this question, but adds another requirement.

Given a parent table 'parent'

╔════════════╦════════╗
║ PARENT_ID  ║ NAME   ║
╠════════════╬════════╣
║         1  ║ bob    ║
║         2  ║ carol  ║
║         3  ║ stew   ║
╚════════════╩════════╝

and a many-many relationship table 'rel' between parent and a (here unspecified) property table

╔════════════╦══════════╗
║ PARENT_ID  ║ PROP_ID  ║
╠════════════╬══════════╣
║         1  ║       5  ║
║         1  ║       1  ║
║         2  ║       5  ║
║         2  ║       4  ║
║         2  ║       1  ║
║         3  ║       1  ║
║         3  ║       3  ║
╚════════════╩══════════╝

How can I select all parents that have all of and only a specified set of relationships? E.g. with the sample data, how can I find all parents that have relationships with exactly property 5 and 1?

like image 360
Laizer Avatar asked Jan 01 '13 18:01

Laizer


1 Answers

SELECT PARENT_ID
FROM rel
GROUP BY PARENT_ID
HAVING SUM(PROP_ID NOT IN (5,1)) = 0
   AND SUM(PROP_ID = 1) = 1 
   AND SUM(PROP_ID = 5) = 1
like image 183
juergen d Avatar answered Sep 16 '22 17:09

juergen d