首页 > 解决方案 > 是否可以使用另一个 select 语句的结果创建一个 select 语句?

问题描述

是否可以使用另一个 select 语句的结果创建一个 select 语句?

重要的是,Table2 可以有不同数量的列。

例子:

Table1: 
+------+------+
| colA | colB | 
+------+------+
| colE |   0  | 
| colF |   0  | 
+--------+----+

Table2:
+------+------+------+
| colE | colF | colG |
+------+------+------+
|   1  |   1  |   1  |
|   1  |   1  |   1  |
+------+------+------+

select colA from Table1 where colB = '0';  
Result:
colE
colF

现在我想对 Table2 中所有列的值求和,其中列名与上面的结果相同(colE 和 colF 的所有值的总和)。在这种情况下,结果应该是 4。

我使用mariaDB。

标签: sqlmariadbsubquery

解决方案


您可以将 Dynamic SQL 与information_schema.columnstable 一起使用,它提供有关表中列的信息,以便Table2通过连接来派生 的列Table1以仅获取匹配的列,例如

SELECT GROUP_CONCAT( CONCAT('SUM(',colA,')') SEPARATOR '+' )
  INTO @sql
  FROM ( SELECT t1.colA 
           FROM( SELECT *
                   FROM information_schema.columns
                  WHERE table_name = 'Table2' ) AS c
           JOIN Table1 AS t1
             ON t1.colA = c.column_name ) AS t;

SET @sql = CONCAT('SELECT ',@sql,'  AS total FROM Table2'); 
                  
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;  

Demo


推荐阅读