Mysql
如何對動態表列表執行 UNION 查詢?
我的數據庫有未知數量的表,以相同的前綴命名,後跟隨機字元串:
_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)一起查詢字元串。