Reputation: 26278
As MySQL-Noob I am struggeling to solve the following task: Assuming 3 tables: location
groceries
and person
with the following properties:
groceries
has a foreign key of an entry in person
.groceries
share the same foreign key.person
and location
, tooSo we have a many to one to many relation. How can I select every triple (groceries_product, person_name, location_name)
where person_name
does not occur more then once?
Example:
tables: groceries | person | location
------------------------------------ ------------- -------------------------
columns: id product person_id | id name | id name person_id
------------------------------------ ------------- -------------------------
1 hamburger 1 | 1 Peter | 1 home 1
2 cheeseburger 1 | 2 Tom | 2 work 1
3 carot 1 | | 3 zoo 2
4 potatoe 1 | |
5 mango 2 | |
All the triples you can create in which Peter
occures are irrelevant. I want only triples like (mango, Tom, zoo), because Tom does occure only once in all possibilities. I hope my question ist understandable. :-)
Upvotes: 0
Views: 2719
Reputation: 1262
I think you have to do a subselect to get your result:
SELECT groceries.product, person.name, location.name
FROM person
LEFT JOIN groceries ON person.id = groceries.person_id
LEFT JOIN location ON person.id = location.person_id
WHERE person.id
IN (
SELECT person.id
FROM person
LEFT JOIN groceries ON person.id = groceries.person_id
LEFT JOIN location ON person.id = location.person_id
GROUP BY person.id
HAVING count( person.id ) =1
)
Upvotes: 2
Reputation: 425258
select l.name, m.name, r.name
from `left` l
left join middle m on m.id = l.middle_id
left join `right` r on m.id = r.middle_id;
Upvotes: -1