MySQL - GROUP_CONCAT 与联接,产生 1054 错误

标签 mysql sql

我尝试根据 this previous answer 的结果进行处理,但似乎没有任何作用。我有一个几乎相同的设置,只是文件类型不同。

文件表文件

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

标签表标签

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 ,该问题在提出问题的人提供的简化表结构中不存在,我认为这是一个拼写错误用于与照片和标签相关的表格。

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

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'

使用 FROM 中命名的 files__tags 表,我得到:

 #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

最佳答案

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

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

关于MySQL - GROUP_CONCAT 与联接,产生 1054 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42693732/

相关文章:

mysql - 在mysql中创建一个函数,如果存在的话

php - sql 从数据库中选择前 10 个值

mysql - 查询电话号码 mysql 有很多格式

java - 这个 getGeneratedKeys() JDBC 语句有什么问题?

mysql - 使用 "IN"语句设置默认值?

sql - 错误 : syntax error at or near "FROM"

mysql - 将值插入相关表的 SQL 命令

php - 在marquee中显示mysql数据

mysql - 改进How to get the number of occurrence for each distinct Value of Group_concat Mysql

mysql - 在关系表中使用主项