簡體   English   中英

如何通過在另一個表中作為行給出的值過濾一個表的列?

[英]How to filter columns of one table by values given as rows in another table?

我在 MySQL 中有兩張桌子。 我想 select 列來自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  |
+--------+

預期 output:

+--------+--------+-------+
| 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 並將查詢發送到數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM