【问题标题】:MYSQL - GROUP_CONCAT results of UNION ALL into one rowMYSQL - UNION ALL 的 GROUP_CONCAT 结果成一行
【发布时间】:2015-04-14 14:55:12
【问题描述】:

我有如下声明:

SELECT DISTINCT Concat("table1.", column_name) 
FROM   information_schema.columns 
WHERE  table_name = "table1" 
UNION ALL 
SELECT DISTINCT Concat("table2.", column_name)  
FROM   information_schema.columns 
WHERE  table_name = "table2";

这会产生以下结果:

+---------------------------------+
| CONCAT("table1.", column_name)  |
+---------------------------------+
| table1.column1                  |
| table1.column2                  |
| table1.column3                  |
| table2.column4                  |
| table2.column5                  |
| table2.column6                  |
| table2.column7                  |
+---------------------------------+

我希望它采用以下格式:

+-----------------------------------------------------------------------------------------------------------+
| CONCAT("table1.", column_name)                                                                            |
+-----------------------------------------------------------------------------------------------------------+
| table1.column1,table1.column2,table1.column3,table2.column4,table2.column5,table2.column6,table2.column7  |
+-----------------------------------------------------------------------------------------------------------+

我尝试过像这样使用GROUP_CONCAT

SELECT Group_Concat(DISTINCT Concat("table1.", column_name)) 
FROM   information_schema.columns 
WHERE  table_name = "table1" 
UNION ALL 
SELECT Group_Concat(DISTINCT Concat("table2.", column_name)) 
FROM   information_schema.columns 
WHERE  table_name = "table2";

但这错误地产生了以下结果:

+--------------------------------------------------------------+
| CONCAT("table1.", column_name)                               |
+--------------------------------------------------------------+
| table1.column1,table1.column2,table1.column3                 |
| table2.column4,table2.column5,table2.column6,table2.column7  | 
+--------------------------------------------------------------+

由此我自然而然地尝试将GROUP_CONCAT它作为子查询,如下所示:

SELECT GROUP_Concat(
    SELECT Group_Concat(DISTINCT Concat("table1.", column_name)) 
    FROM   information_schema.columns 
    WHERE  table_name = "table1" 
    UNION ALL 
    SELECT Group_Concat(DISTINCT Concat("table2.", column_name)) 
    FROM   information_schema.columns 
    WHERE  table_name = "table2" t)
FROM t;

但是上面的语句有语法错误。我如何将UNION ALL 的结果连接成一行?

我已经复习了以下问题,但没有成功:

Combing results from union all into one row when some columns have different values

How do I combine two queries (union all) into one row?

MySQL COUNT results of UNION ALL statement

这有点与我之前的问题有关: MySQL - Subquery in SELECT clause

【问题讨论】:

    标签: mysql group-concat union-all


    【解决方案1】:

    你快到了,试试这个:

    select group_concat(xxx) from (
      SELECT DISTINCT Concat("table1.", column_name)  as xxx
      FROM   columns 
      WHERE  table_name = "table1" 
      UNION ALL 
      SELECT DISTINCT Concat("table2.", column_name)  
      FROM   columns 
      WHERE  table_name = "table2"
    ) as src;
    

    说实话 - 你需要这个 UNION 做什么?这会做同样的事情......

    SELECT  
      group_concat(distinct concat (table_name, '.', column_name) )
    from columns 
    WHERE table_name in ('table1', 'table2');
    

    检查小提琴:http://sqlfiddle.com/#!9/d1172

    【讨论】:

    • 谢谢我的好先生!您的第二个建议确实简化了陈述!
    【解决方案2】:
    SELECT GROUP_Concat(a) 
    
    FROM (
        SELECT Group_Concat(DISTINCT Concat("table1.", column_name)) as a
        FROM   information_schema.columns 
        WHERE  table_name = "table1" 
        UNION ALL 
        SELECT Group_Concat(DISTINCT Concat("table2.", column_name)) 
        FROM   information_schema.columns 
        WHERE  table_name = "table2" ) t
    GROUP BY 1
    

    【讨论】:

    • 感谢 Alex 的回答,但我仍然收到 ERROR 1064 (42000): You have an error in your SQL syntax...
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多