Sql 是否可以使用另一个select语句的结果创建一个select语句?
是否可以使用另一个select语句的结果创建一个select语句 重要的是,表2可以有不同数量的列 例如:Sql 是否可以使用另一个select语句的结果创建一个select语句?,sql,mariadb,subquery,Sql,Mariadb,Subquery,是否可以使用另一个select语句的结果创建一个select语句 重要的是,表2可以有不同数量的列 例如: Table1: +------+------+ | colA | colB | +------+------+ | colE | 0 | | colF | 0 | +--------+----+ Table2: +------+------+------+ | colE | colF | colG | +------+------+------+ | 1 |
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实现这一点?硬编码不是一个选项。表每次都可能不同。