你需要做的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
匹配的索引。
HI Gordon早上好。我在concat_ws –
@BhushanUniyal的情况下出错。 。 。什么样的错误?你的问题被标记为“mysql”和'concat_ws()'是一个非常MySQL的函数:http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat-ws。 –
你能简单介绍一下a.id <> b.a_id吗? –