2011-06-16 32 views
2

我有多個在每個表中添加了相同的date_time字段的表。在完成所有表的聯合之後,我想按最近的一個對它們進行排序。但查詢會告訴我,我必須添加一個表名稱像videos.date_time而不是ORDER BY date_time。我怎樣才能構建查詢,以便它不知道哪個date_time字段?如何做一個不知道排序字段的查詢?

+3

你的SQL的一些示例將非常有幫助 – 2011-06-16 23:59:02

回答

4

除非您使用的是SQL Server的TOP指令等專有功能,否則Order By in Union查詢始終位於底部並始終適用於整個查詢。例如。

Select Col1, date_time 
From Table1 
Union All 
Select Col1, date_time 
From Table2 
Order By date_time 

如果您的查詢不包括各種元素,例如TOP或LIMIT需要一個ORDER BY,因此要區分排序的,那麼你就可以封裝您的查詢,派生表:

Select Col, date_time 
From (
     Select Col1 As Col, date_time 
     From Table1 
     Union All 
     Select Col1, date_time 
     From Table2 
     ) As Z 
Order By Z.date_time 
+0

這是我得到的:使用的SELECT語句有不同數量的列,所以我猜表格需要有完全相同數量的列?我現在要去我的夜班,當我回來時,我會發布udpates!感謝托馬斯! – KPO 2011-06-17 00:13:48

+0

@KPO - 在聯合查詢中,每個查詢必須返回相同數量的列,並且每個位置中的每列必須是相同(或可隱式轉換)的數據類型。 – Thomas 2011-06-17 00:28:13

1

在SQL Server中,您還可以按列號進行排序,例如「ORDER BY 2」在這種情況下,無論您的聯合集合中的第二列是什麼,都將是排序目標。

+0

技術上,在當前版本和以前版本的SQL Server中是這樣,但是微軟已經聲明他們將在未來版本中停止支持該功能。 – Thomas 2011-06-17 00:05:02

+0

@Thomas Ouch!我一直都在使用它(不是在代碼中,而是在ad-hox查詢中) – geofftnz 2011-06-17 00:10:06

+0

同意@geofftnz。特別的好捷徑。我一直對貶值聲明持懷疑態度。我認爲他們是試用氣球。根據有多少人尖叫,這些事情可能永遠持續下去。 – 2011-06-19 12:24:52

0

據我所知,你有X個表格(其中X> 1),每個表格都有它自己的date_time列,並且你想得到最新的更新。如果這是真的,不是可能的方法之一,就是這樣做的

SELECT id, date_added FROM table1 
UNION ALL 
SELECT id, date_added FROM table2 
ORDER BY date_added DESC; 

,我心裏有其他的方式是,當你取結果,擺陣,並做了「魔法」裏面。

+0

@Thomas在我測試我的時候給出了同樣的例子:D – RRStoyanov 2011-06-17 00:14:36