2017-04-14 50 views
0

在我的SQL服務器,我有一個「table_list」必要的記錄「sub_tables」是這樣的:選擇表(SQL樹合併)

================ 
needed_sub_table 
---------------- 
sub_table_1 
sub_table_2    <= table_list_1 
sub_table_3    
================= 

================ 
needed_sub_table 
---------------- 
sub_table_2 
sub_table_6    <= table_list_2 
sub_table_9    
================= 

和sub_tables,它們有完全相同用不同的數據列:

======================== 
ID | name | parentID 
------------------------ 
1 | asv | 0 
2 | asdf | 1    <= sub_table_1 
3 | ggre | 2 
======================== 

======================== 
ID | name | parentID 
------------------------ 
4 | uyer | 3 
5 | dfgh | 4    <= sub_table_2 
6 | dhgr | 5 
======================== 

我試圖做的是:合併了在「table_list」

上市「sub_tables」我試過:

SELECT * FROM (SELECT needed_sub_list FROM table_list) 

但它不起作用。

我希望看到什麼是:

======================== 
ID | name | parentID 
------------------------ 
1 | asv | 0 
2 | asdf | 1    
3 | ggre | 2 
4 | uyer | 3 
5 | dfgh | 4    <= result of table_list_1 
6 | dhgr | 5    (and so for table_list_2....etc.) 
======================== 

而且由於我的項目可能需要sub_tables的不同組合, 我必須保存在其他表的組合。 這意味着我不能直接合並sub_tables,因爲我只能根據table_lists知道需要哪些sub_tables。 任何人都可以請幫助我嗎? 在此先感謝。

+0

'(SELECT needed_sub_list FROM table_list)'返回不止一行。所以在你的語句中,它應該有一行用於子查詢SELECT語句。可能你會得到'#1242 - 子查詢返回多於一行.'錯誤 – hakiko

+0

你得到的輸出是查詢結果,不能作爲主表。如果你想要上面的結果,你應該先拿出結果表並對它們進行聯合操作。 – Rams

回答

1

我認爲你可以得到你想要的只是用什麼基本UNION查詢:

SELECT ID, name, parentID 
FROM sub_table_1 
UNION ALL 
SELECT ID, name, parentID 
FROM sub_table_2 
ORDER BY ID 
+0

我不能直接使用聯合。因爲在我的項目中,所需的子表是動態的,所需的子表的名稱列在名爲「table_list」的表中。 –

+0

這聽起來像數據庫設計不好,除非它是一個家庭作業問題,你被迫這樣做。 –

+0

有什麼建議嗎? –