如何一起使用UNION和GROUP_CONCAT

时间:2011-08-17 17:39:21

标签: mysql syntax union group-concat

在这种情况下,使用UNION和GROUP_CONCAT的语法有问题:

我有4张桌子:

  • base:主表是否有很多列。
  • mm:mm表是使用'tablenames'字段指向下两个表。
  • t1和t2,用于存储相关的数据。

'base'表中的记录可以通过mm表在t1和t2中有许多相关记录。

我在MySQL中创建一个VIEW,我需要将所有相关记录显示在一个用逗号分隔的列中。

这是基本的MySQL代码:

SELECT base.uid, t1.nombre_es
FROM base
INNER JOIN mm 
ON mm.uid_local=base.uid
INNER JOIN t1 
ON mm.uid_foreign=t1.uid WHERE mm.tablenames = 't1'

UNION

SELECT base.uid, t2.nombre_es
FROM base
INNER JOIN mm 
ON mm.uid_local=base.uid
INNER JOIN t2
ON mm.uid_foreign=t2.uid WHERE mm.tablenames = 't2'

提前致谢。


我可以使用两个VIEWS,第一个使用上面的代码,名称为'viewtest',第二个使用此代码:

SELECT base.uid,
GROUP_CONCAT(DISTINCT vi.nombre_es ORDER BY vi.nombre_es SEPARATOR ',') as nombre

FROM base

INNER JOIN viewtest as vi
ON vi.uid=base.uid

GROUP BY uid

现在问题是¿如何在一个视图中加入这两个视图?

1 个答案:

答案 0 :(得分:10)

您可以使用查询中的派生表。接下来是一个如何使用它们的示例。

SELECT GROUP_CONCAT( f ) 
FROM (
  SELECT 1 AS f  # <-- QUERY #1
  UNION 
  SELECT 2 AS f  # <-- QUERY #2
  UNION 
  SELECT 3 AS f  # <-- QUERY #3
) AS T

基本上,您可以将任何SELECT查询用作别名表。然后,您可以将所需的任何聚合函数应用于该别名查询。