以棘手的方式加入MySQL表

use*_*078 1 mysql select join

我有三张桌子

桌子人

id | name
Run Code Online (Sandbox Code Playgroud)

表文件

id | person_data | person_id
Run Code Online (Sandbox Code Playgroud)

表项目

id | item_name | file_id
Run Code Online (Sandbox Code Playgroud)

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

person - file_id -> item 1, file_id -> item 2, file_id -> item 3
Run Code Online (Sandbox Code Playgroud)

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

Dev*_*hah 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
Run Code Online (Sandbox Code Playgroud)