如何从MySQL中的一个到多个关系表中选择唯一的行?

时间:2011-08-03 06:51:46

标签: mysql select unique

作为MySQL-Noob我很难解决以下任务:假设3个表:location groceriesperson具有以下属性:

  1. 每个表都有一个主要的自动增量整数id和一个varchar列。
  2. 表格中的所有内容都是唯一的。
  3. groceries中的每个条目都有一个person条目的外键。
  4. 来自groceries的多个条目可能共享相同的外键。
  5. (3)和(4)也适用于personlocation
  6. 所以我们有很多对一对多的关系。如何选择(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所发生的所有三元组都无关紧要。我只想要三倍(芒果,汤姆,动物园),因为汤姆在所有可能性中只发生过一次。我希望我的问题是可以理解的。 : - )

2 个答案:

答案 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;