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

Is it possible to create a select statement with the result of another select statement?

是否可以用另一个 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。

您可以将动态 SQL 与 information_schema.columns table 一起使用,后者提供有关 table 中列的信息,以便导出 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