2010-02-16 68 views
1

我爲兩個不同表中選擇數據使用該SQL查詢
區分各行

 select * from (SELECT s.shout_id, s.user_id, s.time FROM shouts s 
union all 
select v.post_id, v.sender_user_id, v.time from void_post v) 
as derived_table order by time desc; 

現在是有任何其他方式或與此SQL語句沒有匹配的列只能我 區分來自兩個表的數據。

我正在考慮一個可以在運行時創建的虛擬行(僅在select語句中),它將標記來自任一表的行。

由於沒有辦法,我可以區分shout_id扔在聯合表中 shout_id從喊表或void_post表。

感謝
Pradyut

回答

4

你可以只包含一個額外的列的每個選擇(我建議一個BIT)

select * from 
(SELECT s.shout_id, s.user_id, s.time, 1 AS FromShouts FROM shouts s 
union all 
select v.post_id, v.sender_user_id, v.time, 0 AS FromShouts from void_post v) 
as derived_table order by time desc; 
+0

有點佔用更少的MEM I認爲...... –

+0

和應用程序編程將有更快的處理... –

2

一個虛擬變量是一個很好的辦法做到這一點。事情的宏偉計劃沒有太多的開銷。

p.s.,虛擬變量代表一列,而不是一行。

5

當然,只需在您的select語句中添加一個新字段,名稱與source類似,每個源的常量值都不相同。

SELECT s.shout_id, s.user_id, s.time, 'shouts' as source FROM shouts s 
UNION ALL 
SELECT v.post_id, v.sender_user_id, v.time, 'void_post' as source FROM void_post v 
+2

+1 - 呸,打我吧:) – AdaTheDev