mysql - 使用 GROUP_CONCAT 重复值而不在具有多个连接的 MySQL 查询上使用 DISTINCT

标签 mysql sql join distinct group-concat

我有一个类似于下面的架构,我正在尝试进行查询以从单个项目中获取所有过滤器和所有 project_items,以便使用 GROUP_CONCAT 结果仅在一行中。

过滤器

  • 编号
  • 标题

项目过滤器

  • 编号
  • filters_id
  • 项目编号

项目

  • 编号
  • 标题

项目项目

  • 编号
  • 标题
  • 项目编号

表格是这样连接的

[过滤器] 1--N [project_filters] N--1 [项目] 1--N [project_items]

疑问与问题

  • 选择
  • 项目.id,
  • projects.title,
  • GROUP_CONCAT(project_items.title) AS items_title,
  • GROUP_CONCAT(filters.title) AS filters_title
  • 来自项目
  • LEFT JOIN project_items ON project_items.projects_id=projects.id
  • LEFT JOIN project_filters ON projects.id=project_filters.projects_id
  • 在 filters.id=project_filters.filters_id 上左加入过滤器
  • WHERE projects.id="1"

项目 1 有 3 个过滤器(1、2 和 3)和 3 个项目(1、2 和 3),这导致重复值(每个 9 个),如下所示:

  • id = 1
  • title = 项目 1
  • items_title = 标题 1、标题 2、标题 3、标题 1、标题 2、标题 3、标题 1、标题 2、标题 3
  • filters_title = 过滤器 1、过滤器 2、过滤器 3、过滤器 1、过滤器 2、过滤器 3、过滤器 1、过滤器 2、过滤器 3

谁能给我指出正确的方向?我想知道如何使查询不重复地返回过滤器和项目。

我认为解决方案是以某种方式安排连接,但我想不出来。

OBS:带有 DISTINCT 的 GROUP_CONCAT 不适合,因为可能有重复的标题

非常感谢!

最佳答案

好吧,通过@cha 的回答(感谢伙伴)和更多的研究,我通过删除两个查询之间的 INNER JOIN 得到了正确的结果。

SELECT i.id, i.title, i.items_title, f.filters_title FROM
( SELECT
  projects.id,
  projects.title,
  GROUP_CONCAT(project_items.title) AS items_title
  FROM projects
  LEFT JOIN project_items ON project_items.projects_id=projects.id
  WHERE projects.id="1"
  GROUP BY projects.id) AS i,
( SELECT
  projects.id,
  projects.title,
  GROUP_CONCAT(filters.title) AS filters_title
  FROM projects
  LEFT JOIN project_filters ON projects.id=project_filters.projects_id
  LEFT JOIN filters ON filters.id=project_filters.filters_id
  WHERE projects.id="1"
  GROUP BY projects.id) AS f
WHERE i.id=f.id

关于mysql - 使用 GROUP_CONCAT 重复值而不在具有多个连接的 MySQL 查询上使用 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22951748/

相关文章:

java - SQL - PreparedStatement - 效率 - JDBC

sql - 如何在修改并随后使用字段的情况下运行SQL UPDATE查询

mysql - 三表连接的结果不正确

mysql - 我怎样才能压缩3个mysql查询;使用 AVG 和 COUNT

php - 从两个表连接,然后从结果连接到第三个表mysql

php - 无法使用 PHP 从 MySQL 获取

mysql - 添加 '1' 返回 "BLOB"

MySQL类别和子类别表结构

mysql - NodeJS Sequelize 时间戳已禁用,但仍然出现未知列 'createdAt' 错误

java - 使用左连接在 postgres 数据库中进行 SQL 查询