我试图解决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
答案 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