我对在这种情况下使用 UNION 和 GROUP_CONCAT 的正确语法有疑问:
我有 4 个表:
- base:是有很多列的主表。
- mm:是一个 mm 表,它使用“表名”字段指向接下来的两个表。
- 存储相关数据的t1和t2。
'基'表中的记录可以通过 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'
提前致谢。
我可以使用两个 View 来完成,第一个使用上面的代码,名称为“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
现在的问题是“如何将这两个 View 合并到一个 View 中?”
最佳答案
您可以使用来自查询的派生表。接下来是如何使用它们的示例。
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 查询用作别名表。然后,您可以将所需的任何聚合函数应用于该别名查询。
关于mysql - 如何一起使用 UNION 和 GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097068/