sql - 是否可以使用另一个 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。
解决方案
您可以将 Dynamic SQL 与information_schema.columns
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;
推荐阅读
- c# - 我可以使用 List 做 ADO.NET
或 IEnumerable 在 .NET 核心中? - c++ - 尝试在 C++ 项目中使用 Metal 时出现“未知类型名称‘NSString’”错误(vs code,mac m1)
- shopping-cart - 自定义添加到购物车并立即从 prestashop 1.7.6.4 购买
- javascript - React.forwarRef 打破了 vscode 对 propTypes 的自动完成
- javascript - Github 为 R 用户提供的 JavaScript 安全警报
- reactjs - 我很难启动或运行一个简单的 React JS
- common-lisp - 为什么运球会产生一个空文件?
- postgresql - Hasura 2.0,有没有办法使用通配符?
- discord.js - DISCORD.JS 如何使用@user 进行验证
- javascript - 根据条件使用 axios 和 promise 组合 2 个 json 数据集