2011-08-17 46 views
4

我有正确的语法问题使用UNION和GROUP_CONCAT在这种情况下:如何使用UNION和GROUP_CONCAT一起

我有4个表:

  • 基地:是与主表很多列。
  • 毫米:是一个毫米表,使用'tablenames'字段指向下两个表。
  • 存储数据相关的t1和t2。

“基本”表中的记录可以在t1和t2中通过mm表有很多相关记录。

我在MySQL中创建一个视图,我需要所有这些相关记录显示在单列中用逗号分隔。

这是基本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' 

预先感谢。


我可以使用两种观点,第一个使用上述名称为“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 

现在的问题是¿我怎样才能在单个视图中加入此两种观点?

回答

9

您可以使用派生表的查询。接下来是你如何使用它们的例子。

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查询作为别名表。然后,您可以将所需的任何聚合函数应用于该别名查询。

+0

感谢Ignacio为你的答案,我害怕表现:[派生表和视图性能](http://www.mysqlperformanceblog.com/2006/08/31/derived-tables-and-views-performance/ )你知道其他方式来做我需要的吗? – Memochipan