mysql - 来自使用 GROUP_CONCAT() 打包的 Tri-INNER JOIN-Relation 的重复值

标签 mysql sql

我应该得到以下行

[id -              gamma             -              omega            ]
[1  - Gamma1, Gamma2, Gamma3, Gamma4 - Omega1, Omega2, Omega3, Omega4]

但我得到的结果显示在 SQLFiddle

如果我删除了 SET 并保留了它的 GROUP_CONCAT(),它会正常工作。

为什么关系会相互作用并产生重复值?

SQL:

SELECT a.id, 
       GROUP_CONCAT(g.name) AS gamma, 
       GROUP_CONCAT(o.name) AS omega 
FROM alpha a

     #SET A.O.
     INNER JOIN alpha_omega ao ON ao.alpha_id = a.id 
     INNER JOIN omega o ON o.id = ao.omega_id 

     #SET A.G.
     INNER JOIN alpha_gamma ag ON ag.alpha_id = a.id 
     INNER JOIN gamma g ON g.id = ag.gamma_id

WHERE a.id = 1
GROUP BY a.id

最佳答案

可能是正确的连接(不使用 GROUP_CONCAT(DISTINCT ...)):

SELECT a.id, GROUP_CONCAT(o.name) AS omega  
FROM alpha a
JOIN delta d ON d.alpha_id = a.id 
JOIN omega o ON o.id = d.omega_id 
GROUP BY a.id
UNION ALL
SELECT a.id, GROUP_CONCAT(g.name) AS gamma
FROM alpha a
JOIN beta b ON b.alpha_id = a.id 
JOIN gamma g ON g.id = b.gamma_id
GROUP BY a.id;

在一行内:

SELECT id, MIN(gamma) AS gamma, MIN(omega) AS omega
FROM (
SELECT a.id, NULL AS gamma, GROUP_CONCAT(o.name ORDER BY o.name) AS omega  
  FROM alpha a
  JOIN delta d ON d.alpha_id = a.id 
  JOIN omega o ON o.id = d.omega_id
  GROUP BY a.id
  UNION ALL
  SELECT a.id, GROUP_CONCAT(g.name ORDER BY g.name) AS gamma, NULL
  FROM alpha a
  JOIN beta b ON b.alpha_id = a.id 
  JOIN gamma g ON g.id = b.gamma_id
  GROUP BY a.id
) sub
GROUP BY id;

SQL Fiddle Demo

关于mysql - 来自使用 GROUP_CONCAT() 打包的 Tri-INNER JOIN-Relation 的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48751162/

相关文章:

java - JPA Criteria API 在 order by 语句中使用 ISNULL

mysql - 导入 mysql 转储而不覆盖现有数据

mysql - 从 mysql 迁移后使用 postgres 数据库进行 Sequelize 不工作

mysql - 使用类似的 MySQL 表,但一列的 varchar 大小不同,以节省数据库大小,通过 UNION 查询

sql - MySQL:如何从数据库中的字段中删除尾随的 HTML?

c# - 已经有一个打开的 DataReader 与此连接关联,必须先将其关闭

sql - 将权限从一个域转移到SQL Server中的另一个域

SQL Server 2008删除特殊模式下的所有表

sql - 使用 group by 查找计数

php - 使用 json_encode 回显一个数组