以棘手的方式加入MySQL表

时间:2013-05-21 19:47:19

标签: mysql select join

我有三张桌子

表人

id | name

表格文件

id | person_data | person_id

表项目

id | item_name | file_id

每个人都有多个文件,每个文件都有多个项目。 有没有办法为每个人选择所有项目只使用mysql返回这样的东西:

person - file_id -> item 1, file_id -> item 2, file_id -> item 3

我正在考虑某种类型的JOIN,我尝试了所有可以想象的组合,但我认为加入它不是解决方案,或者......

2 个答案:

答案 0 :(得分:5)

使用GROUP_CONCAT。请检查SQLFiddle

SELECT
  b.id,b.name,
  GROUP_CONCAT(b.items SEPARATOR '|')
FROM (SELECT
        p.id,p.name,
        CONCAT(f.id,' -> ', GROUP_CONCAT(i.item_name)) AS items
      FROM persons p,
        files f,
        items i
      WHERE p.id = f.person_id
          AND f.id = i.file_id
      GROUP BY f.id) AS b
GROUP BY b.id

答案 1 :(得分:3)

SELECT ti.id, ti.item_name
FROM TableItems ti
INNER JOIN TableFiles tf ON tf.id = ti.file_id
INNER JOIN TablePersons tp ON tp.id = tf.person_id
WHERE tp.id = :id

:id是您要为其列出项目的人的id