【发布时间】:2021-05-07 15:07:58
【问题描述】:
我在 MySQL 中有两个表。我想从 main_table 中选择列,这些列在 cols_filter 表中作为行给出(这是一个可以随时编辑的小表)。
main_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。我可能会认为需要这样做表明应用程序存在潜在缺陷。