mysql - 如何通过在另一个表中作为行给出的值过滤一个表的列?
问题描述
我在 MySQL 中有两个表。我想从main_table中选择列,这些列在cols_filter表中作为行给出(它是一个可以随时编辑的小表)。
主表:
+--------+--------+---------+-------+-------+
| Col_A | Col_B | Col_C | Col_D | Col_E |
+--------+--------+---------+-------+-------+
| Apple | 585416 | Monday | 0 | Y |
| Banana | 857463 | Sunday | 1 | N |
| Orange | 852147 | Friday | 0 | N |
| Plum | 753951 | Sunday | 1 | Y |
| Peach | 448691 | Monday | 0 | N |
+--------+--------+---------+-------+-------+
cols_filter:
+--------+
| names |
+--------+
| Col_A |
| Col_B |
| Col_E |
+--------+
预期输出:
+--------+--------+-------+
| Col_A | Col_B | Col_E |
+--------+--------+-------+
| Apple | 585416 | Y |
| Banana | 857463 | N |
| Orange | 852147 | N |
| Plum | 753951 | Y |
| Peach | 448691 | N |
+--------+--------+-------+
我试图使用 GROUP_CONCAT 创建一个子查询,以将cols_filter中的所有行作为逗号分隔值放在一行中:
SELECT GROUP_CONCAT(names) AS Columns
FROM cols_filter
+---------------------+
| Columns |
+---------------------+
| Col_A, Col_B, Col_E |
+---------------------+
...并将其用作主查询中的列表,而不是将某些列名放在那里,但它不起作用。
我在这里找不到类似的问题。有任何想法吗?
解决方案
框架 SQL 在数据库本身内不能是动态的,但可以通过顶部的少量编程来实现。您可以使用任何编程语言(python/java/scala)动态生成 SQL 并将查询发送到数据库。
推荐阅读
- javascript - 使用 Webpack Encore 在 Angular 数据表中找不到数据表
- spring - spring mvc:自定义查询的 jpa 存储库错误
- php - Envoyer mkdir 问题
- xaml - ListView 仅适用于 Android 错误
- python - Python:使用 write() 函数输出三个变量
- sql - 如何在一个查询中从两个表中查找缺失的记录?
- node.js - 使用 nodered 从 dynamodb 收集数据
- javascript - 提交错误后记住单选选项
- python - 根据条件执行矩阵乘积的最佳方法
- ruby - 将 selenium - rubygems 测试添加到 azure dev-ops 管道