mySQL GROUP_CONCAT IN JOIN

标签 mysql join group-concat

我有以下 SQL。我正在尝试在 Join 中执行 GROUP_CONCAT,但无论我如何尝试,它似乎都无法正常工作。

本质上有一个链接标签表,它在另一个保存标签的表上执行一对多操作。因此,一篇文章记录可能有 8 个标签。我需要将它们连接在一起。最终有 8 条记录。

SELECT 
  `articles`.`art_title`,
  `articles`.`art_bodytext`,
  `info`.`inf_start_date`,
  `info`.`inf_end_date`,
  `info`.`inf_hits`,
  `info`.`inf_acl`,
  `category`.`name`,
  `options`.`opt_tpl`,
  `options`.`opt_published`,
  `options`.`opt_options`,
  `options`.`opt_acl`,
  `tags`.`tag`
FROM
  `linktable`
  INNER JOIN `articles` ON (`linktable`.`lnk_data_id` = `articles`.`art_id`)
  INNER JOIN `info` ON (`articles`.`art_info_id` = `info`.`inf_id`)
  INNER JOIN `category` ON (`articles`.`art_cat_id` = `category`.`id`)
  AND (`articles`.`art_cat_tree_id` = `category`.`fid`)
  INNER JOIN `options` ON (`articles`.`art_opt_id` = `options`.`opt_id`)
  INNER JOIN `linktags` ON (`articles`.`art_tag_set_id` = `linktags`.`lnk_tagset_id`)
  LEFT OUTER JOIN GROUP_CONCAT(`tags`) ON (`linktags`.`lnk_tag_id` = `tags`.`tag_id`)
WHERE
  `linktable`.`lnk_pgc_id` = 1

最佳答案

  • GROUP_CONCAT()移至字段列表中,它不是连接条件,而是字段计算。
  • 添加GROUP BY以查找要合并的行

这给出

SELECT 
  `articles`.`art_title`,
  `articles`.`art_bodytext`,
  `info`.`inf_start_date`,
  `info`.`inf_end_date`,
  `info`.`inf_hits`,
  `info`.`inf_acl`,
  `category`.`name`,
  `options`.`opt_tpl`,
  `options`.`opt_published`,
  `options`.`opt_options`,
  `options`.`opt_acl`,
  GROUP_CONCAT(`tags`.`tag`) AS tags
FROM
  `linktable`
  INNER JOIN `articles` ON (`linktable`.`lnk_data_id` = `articles`.`art_id`)
  INNER JOIN `info` ON (`articles`.`art_info_id` = `info`.`inf_id`)
  INNER JOIN `category` ON (`articles`.`art_cat_id` = `category`.`id`)
  AND (`articles`.`art_cat_tree_id` = `category`.`fid`)
  INNER JOIN `options` ON (`articles`.`art_opt_id` = `options`.`opt_id`)
  INNER JOIN `linktags` ON (`articles`.`art_tag_set_id` = `linktags`.`lnk_tagset_id`)
  LEFT JOIN `tags` ON (`linktags`.`lnk_tag_id` = `tags`.`tag_id`)
WHERE
  `linktable`.`lnk_pgc_id` = 1
GROUP BY `articles`.`art_id`

关于mySQL GROUP_CONCAT IN JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23127309/

相关文章:

sql - SQL 中 IN 和 EXISTS 的使用

hibernate - 为什么 Hibernate 无法在实体中找到辅助表?

sql - 如何合并 SQLite 中每个表的所有公共(public)列

mysql - 通过 Web 服务在 MySQL 和 SQLite 之间传输数据的选项

mysql连接表将数据库与表行分开

mysql - ClearDB - 读取最新数据需要时间吗?

与插入和限制一起使用时的 MySql group_concat 行为

sql - MySQL GROUP_CONCAT + IN() = 丢失数据 :-(

mysql - 关系数据库逻辑

php - 在 MySql 查询中结合 PHP Rtrim