MySQL - 带有连接的GROUP_CONCAT,产生1054错误

时间:2017-03-09 11:06:38

标签: mysql sql

我试图解决this previous answer的结果,但似乎没有任何效果。我有一个几乎相同的设置,只是使用不同类型的文件。

文件表files

id    file_name
 1    1e462cef-1c2c-4ddf-8b48-0b3002e2101d.nzb
 2    303dc268-bf55-49e5-9901-cfbb99b09a69.nzb
 3    1297993d-784b-4996-b3b9-9048b068652b.nzb
 4    a2cebf3a-b3b1-498e-ad4c-100774ff4b9d.nzb

标记表tags

id    tag_name
 1    no.mirrors
 2    at.least.one.mirror
 3    multiple.mirrors
 4    no.mirrors
 5    original.deleted

文件 - 标签关系表files__tags

file_id (FK to files.id)   tag_id (FK to tags.id)
      1                    1
      1                    5
      2                    1
      3                    3
      3                    5
      4                    4

所以我希望得到一些输出:

file_id   file_name                                   tags
      1   1e462cef-1c2c-4ddf-8b48-0b3002e2101d.nzb    1,5
      2   303dc268-bf55-49e5-9901-cfbb99b09a69.nzb    1
      3   1297993d-784b-4996-b3b9-9048b068652b.nzb    3,5
      4   a2cebf3a-b3b1-498e-ad4c-100774ff4b9d.nzb    4

我试图从上一个问题的答案中重新创建我的查询:

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags
FROM files
LEFT OUTER JOIN tags ON files__tags.file_id = files.id
GROUP BY files.file_name;

我尝试了其他一些东西,这个问题的答案引用了一个tag.photo,这个问题提供的人提供的简化表格结构中不存在{I},我认为这是关于照片表的拼写错误和标签。

无论如何,我得到的错误是:

SQL query:

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags
FROM files
LEFT OUTER JOIN tags ON files__tags.file_id = files.id
GROUP BY files.file_name LIMIT 0, 25

MySQL said:
#1054 - Unknown column 'files__tags.tag_id' in 'field list'

以上所有列都存在。

非常感谢任何想法!

编辑:我尝试了两个建议(将关系数据库添加到FROM并转义表/列名称)

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags
FROM files,files__tags
LEFT OUTER JOIN tags ON `files__tags`.`file_id` = `files`.`id`
GROUP BY files.file_name;

我还自己尝试了这些内容,并在整个语句中转义所有表/列名称。

随着逃跑我得到:

 #1054 - Unknown column 'files__tags.tag_id' in 'field list'

使用files__tags中指定的FROM表格,我得到:

 #1054 - Unknown column 'files.id' in 'on clause'

EDIT2 :好的,非常感谢解决方案

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags
FROM files
LEFT JOIN files__tags ON files__tags.file_id =files.id
LEFT OUTER JOIN tags ON tags.id=files__tags.tag_id 
GROUP BY files.file_name LIMIT 0, 25

2 个答案:

答案 0 :(得分:0)

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags
FROM files
LEFT JOIN files__tags ON files__tags.file_id =files.id
LEFT OUTER JOIN tags ON tags.id=files__tags.tag_id 
GROUP BY files.file_name LIMIT 0, 25

尝试上面的代码,希望这会有所帮助

答案 1 :(得分:0)

我不确定为什么要使用LEFT OUTER JOIN。试试这个

     SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags
FROM files
LEFT JOIN files__tags ON files__tags.file_id =files.id
LEFT JOIN tags ON tags.id=files__tags.tag_id 
GROUP BY files__tags.file_id LIMIT 0, 25