3 个表和 2 个带有 CONCAT 表达式的独立 JOIN

Posted

技术标签:

【中文标题】3 个表和 2 个带有 CONCAT 表达式的独立 JOIN【英文标题】:3 tables and 2 independent JOINs with CONCAT expressions 【发布时间】:2015-05-19 02:37:54 【问题描述】:

我有以下 3 个带有 ID 的表

表:用户

user | name
  1  | Joe
  2  | John

表:user_id1

user | id1
  1  |   2
  1  |   3
  2  |   5

表:user_id2

user | id2
  1  |   3
  1  |   4

我想为每个用户得到以下结果

name | ids 1 | ids 2
 Joe | 2,3   | 3,4
 John| 5     | NULL

我使用这个查询:

SELECT
  user.name,
  GROUP_CONCAT(user_id1.id1) AS "ids1",
  GROUP_CONCAT(user_id2.id2) AS "ids2"

FROM users

LEFT JOIN user_id1
  ON user_id1.user=users.user

LEFT JOIN user_id2
  ON user_id2.user=users.user

但我得到了这个结果:

name | ids1    | ids2
Joe  | 2,2,3,3 | 3,4,3,4
John | 5       | NULL

怎么了? 感谢您的帮助

【问题讨论】:

【参考方案1】:

使用 DISTINCT 应​​该可以解决它

SELECT
  user.name,
  GROUP_CONCAT(DISTINCT user_id1.id1) AS "ids1",
  GROUP_CONCAT(DISTINCT user_id2.id2) AS "ids2"

FROM users

LEFT JOIN user_id1
  ON user_id1.user=users.user

LEFT JOIN user_id2
  ON user_id2.user=users.user

【讨论】:

以上是关于3 个表和 2 个带有 CONCAT 表达式的独立 JOIN的主要内容,如果未能解决你的问题,请参考以下文章

加入 3 个表,从 2 个不同的表和按材料名称分组的总数量

查询从 3 个表中获取数据,主表和总和列从彼此 2 个表中获取

laravel 查询 - 加入 2 个表和 groupBy 相同的 ID

带有 LEFT JOIN 和 IF 语句的有限 GROUP_CONCAT

mysql 查看大表,查看个表占用大小

EF linq/lambdas 使用 concat 连接 2 个表