【问题标题】:How to filter columns of one table by values given as rows in another table?如何通过在另一个表中作为行给出的值过滤一个表的列?
【发布时间】:2021-05-07 15:07:58
【问题描述】:

我在 MySQL 中有两个表。我想从 main_table 中选择列,这些列在 cols_filter 表中作为行给出(这是一个可以随时编辑的小表)。

ma​​in_table:

+--------+--------+---------+-------+-------+
| 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。我可能会认为需要这样做表明应用程序存在潜在缺陷。

标签: mysql sql


【解决方案1】:

框架 SQL 在数据库本身内不能是动态的,但可以通过顶部的少量编程来实现。您可以使用任何编程语言(python/java/scala)动态生成 SQL 并将查询触发到数据库。

【讨论】:

    猜你喜欢
    • 2022-09-24
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多