2009-09-19 76 views
2

我有以下兩個表:從兩個不同的表中獲取數據到一個表中?

uid | ABC | ... (bunch of other stuff) ... 
1  | val 1 | ... (bunch of other stuff) ... 
2  | val 2 | ... (bunch of other stuff) ... 
3  | val 3 | ... (bunch of other stuff) ... 

和...

uid | DEF | ... (bunch of other stuff) ... 
4  | val 4 | ... (bunch of other stuff) ... 
5  | val 5 | ... (bunch of other stuff) ... 
6  | val 6 | ... (bunch of other stuff) ... 

我想結束了......

uid | text | ... (bunch of other stuff) ... 
1  | val 1 | ... (bunch of other stuff) ... 
2  | val 2 | ... (bunch of other stuff) ... 
3  | val 3 | ... (bunch of other stuff) ... 
4  | val 4 | ... (bunch of other stuff) ... 
5  | val 5 | ... (bunch of other stuff) ... 
6  | val 6 | ... (bunch of other stuff) ... 

這看起來很簡單,但我似乎無法弄清楚如何做到這一點。這不是一個加入?是嗎?

+0

RD:你打算使用這些數據來創建一個真正的表供以後使用,或者你想收集數據作爲一個單一的結果嗎? – 2009-09-19 17:51:39

+0

單一結果。聯盟是我正在尋找的!感謝名單! – coderama 2009-09-19 18:00:52

回答

5

UNION條款將幫助你在這裏。它將兩個或多個結果集組合爲一個。

嘗試:

SELECT uid, ABC, OtherStuff 
FROM Table1 

UNION 

SELECT uid, DEF, OtherStuff 
FROM Table2 

UNION 

SELECT uid, GHI, OtherStuff 
FROM Table3 

ORDER BY uid 

有關於這一主題與UNION ALL運營商的變化。 UNION將顯式刪除重複的行,而UNION ALL保留它們。

這具有超出行簡單差異的影響:刪除重複操作符UNION操作員需要對最終結果集進行排序。這是運營商沒有經歷的開銷UNION ALL。此外,與UNION ALL相比,顯式排序操作可能導致由UNION收集的結果集的排序順序不同。我建議您在收集結果集後使用明確的ORDER BY聲明,以確保您的排序順序與您打算的一樣。

請注意,結果集中的列數必須匹配UNION ed。從OP中不清楚這兩個表在他們存儲的列數方面有何不同,因此我不願在兩個SELECT *語句之間執行UNION

+0

如果你想從中創建一個真正的表格,確切的語句取決於你正在使用的數據庫。在大多數情況下,它是「創建表foo作爲選擇uid,ABC ...」 – KingPong 2009-09-19 17:47:18

+0

@KingPong:我認爲OP意味着他/她想要一個結果集,而不一定是真正的表。我已經向OP發佈了評論,因爲你可能是對的。 – 2009-09-19 17:52:15

1

選擇*到從表3 (SELECT * FROM表1工會SELECT * FROM表2)作爲TMP

+0

我們希望其他一些東西都有相同的模式。 – Zed 2009-09-19 17:45:21

1

這將工會兩組結果。爲了進行聯合,列必須是兼容的類型。

(SELECT * FROM table1) UNION (SELECT * FROM table2) 
0

請記住,union命令將刪除重複的行。 如果這不是所期望的行爲,則希望使用union all。

相關問題