Mysql创建group_concat联合

时间:2016-04-12 18:35:46

标签: mysql sql

我有2个子查询

1:

(select group_concat(a.name) 
 from A a 
 where a.id = c.a_id) as name

2:

(select group_concat(a.name) 
 from A a 
 where a.id = b.a_id) as name

现在我需要创建一个union,这意味着我需要名称唯一的名单列表

1 个答案:

答案 0 :(得分:1)

您需要group_concat()上的union

(select group_concat(abc.name) 
 from ((select name from A a where a.id = c.a_id) 
       union
       (select name from A a where a.id = b.a_id)
      ) abc
)

但是,唉,由于MySQL的范围规则,它不会起作用 - 你要深入两个层次。因此,一个解决方案是or

(select group_concat(abc.name) 
 from A a
 where a.id = c.a_id or a.id = b.a_id)
) abc

可悲的是,性能可能会很糟糕,因为or通常会阻止使用索引。

嗯。嗯。 。 。一种可以获得唯一性并仍然使用索引的方法可能是简单的连接:

concat_ws(',',
          (select group_concat(abc.name) 
           from A a
           where a.id = c.a_id 
          ),
          (select group_concat(abc.name) 
           from A a
           where a.id = c.a_id and a.id <> b.a_id
          )
         )

这不是100%万无一失(两个不同的a.id行可能具有相同的名称,导致重复)。但是在很多情况下这会起作用,每个子查询都应该利用id匹配的索引。