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

Sql 是否可以使用另一个select语句的结果创建一个select语句?,sql,mariadb,subquery,Sql,Mariadb,Subquery,是否可以使用另一个select语句的结果创建一个select语句 重要的是,表2可以有不同数量的列 例如: Table1: +------+------+ | colA | colB | +------+------+ | colE | 0 | | colF | 0 | +--------+----+ Table2: +------+------+------+ | colE | colF | colG | +------+------+------+ | 1 |

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

重要的是,表2可以有不同数量的列

例如:

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
现在我想对表2中的所有列的值求和,其中的列名与上面的结果相同(colE和colF的所有值之和)。在这种情况下,结果应该是4


我使用mariaDB。

您可以将动态SQL与
信息\u schema.columns
表一起使用,该表提供关于表中列的信息,以便通过连接到
表1
来派生
表2
的列,从而仅获得匹配的列,例如

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;  

您可以对值进行硬编码(如果您知道所有值),也可以使用动态SQL。您需要规范化表。阅读这篇文章:@GordonLinoff,我如何使用动态SQL实现这一点?硬编码不是一个选项。表每次都可能不同。