Mysql

如何對動態表列表執行 UNION 查詢?

  • September 19, 2012

我的數據庫有未知數量的表,以相同的前綴命名,後跟隨機字元串:_ct_<random_string>

這些表中的每一個都具有相同的資料結構。

我還有另一個表,其中儲存了每個表的名稱以供將來參考。

以下表名為“content_types”,並為其他表提供參考:

+-----------------+
| id | table_name |
+-----------------+
| 1  | _ct_table1 |
| 2  | _ct_table2 |
| 3  | _ct_table3 |
| 4  | _ct_fdfsf  |
| 5  | _ct_535dgf |
...
+-----------------+

以下是 ‘content_types’.’table_name’ 中引用表的範例:

_ct_table1:                              _ct_table2:
+-----------------------------------+    +-----------------------------------+
| id | title | subtitle | date      |    | id | title | subtitle | date      |
+-----------------------------------+    +-----------------------------------+
| 1  | fddfs | ...      | 2012-08-22|    | 4  | fddfs | ...      | 2012-03-18|
| 2  | bdsf  |          | 2012-08-22|    | 5  | b4sf  | dfs      | 2012-07-20|
| 3  | sfdsd |          | 2012-08-22|    | 6  | sfdsd |          | 2012-03-12|
+-----------------------------------+    +-----------------------------------+

UNION是否可以根據 ‘content_types’.’table_name’ 中列出的表使用動態語句創建查詢?

像這樣的東西:

select id,title,subtitle,date 
from 
   (
       select table_name 
       from content_types
   );

是的你可以。有幾種方法可以做到這一點。

1> 如果您以互動方式使用數據庫,則只需輸入查詢。2> 如果通過應用程序或腳本訪問數據庫,請在應用程序/腳本中編寫一個方法來創建所需的查詢,然後執行它。您將有一個數據庫呼叫來獲取表名列表,然後使用聯合查詢創建一個字元串,然後執行該查詢。3> 與選項 2 類似,大多數儲存過程語言允許您將查詢作為字元串動態創建,然後執行該字元串 - 查看您的數據庫文件以了解如何執行此操作。

Mysql 範例https://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored-procedure。您可能喜歡使用游標 ( http://dev.mysql.com/doc/refman/5.0/en/cursors.html ) 將表名列表迭代到 Concat ( http://dev.mysql.com /doc/refman/5.0/en/string-functions.html#function_concat)一起查詢字元串。

引用自:https://dba.stackexchange.com/questions/22945