作为MySQL-Noob我很难解决以下任务:假设3个表:location
groceries
和person
具有以下属性:
groceries
中的每个条目都有一个person
条目的外键。groceries
的多个条目可能共享相同的外键。person
和location
所以我们有很多对一对多的关系。如何选择(groceries_product, person_name, location_name)
不会再发生一次的每个三联person_name
?
示例:
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 | |
您可以创建Peter
所发生的所有三元组都无关紧要。我只想要三倍(芒果,汤姆,动物园),因为汤姆在所有可能性中只发生过一次。我希望我的问题是可以理解的。 : - )
答案 0 :(得分:1)
我认为你必须做一个subselect才能得到你的结果:
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
)
答案 1 :(得分:-1)
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;