2012-05-31 15 views
1

我想使用UNION檢索兩個表的最新記錄,即使使用ORDER BY,它也會返回數據但不是最新記錄。這是我的查詢:在SQL Server中使用帶有ORDER的UNION

SELECT TOP(1) OwnerID,NewsTitle,NewsCreationDate,NewsTitle,NewsEnglishName 
FROM TheaterNews 
    UNION 
    SELECT TOP(3) OwnerID,NewsTitle,NewsCreationDate,NewsTitle,NewsEnglishName 
FROM MoviesNews 
    ORDER BY 3 DESC 

這是查詢的輸出:
output using UNION

TheaterNews最新的記錄是新的:

SELECT OwnerID,NewsTitle,NewsCreationDate,NewsTitle,NewsEnglishName 
FROM TheaterNews 
ORDER BY NewsCreationDate DESC 

latest records for TheaterNews table

我怎樣才能解決這個問題?即使用另一種方法。

回答

1

這應該在你的情況下工作。可能是一個粗略的解決方案,但你會得到你的答案。你可以用@tables替換#tables。

SELECT TOP(1) 
    OwnerID, 
    NewsTitle, 
    NewsCreationDate, 
    NewsEnglishName 
into 
    #Table1 
FROM 
    TheaterNews 
ORDER BY 3 DESC 

SELECT TOP(3) 
    OwnerID, 
    NewsTitle, 
    NewsCreationDate, 
    NewsEnglishName 
into 
    #Table2 
FROM 
    MoviesNews 
ORDER BY 3 DESC 

select * from #Table1 
union 
select * from #Table2 

drop table #Table1 
drop table #Table2 
+0

'Msg 156,Level 15,State 1,Line 13 關鍵字'UNION'附近的語法錯誤。 – Maysam

+0

我忘記刪除前兩個選擇之間的聯合。我編輯了源代碼。從上面複製並再次嘗試... –

+1

謝謝,它的工作原理。 – Maysam

1

試試這個:

Select * From (SELECT TOP(1) OwnerID,NewsTitle,NewsCreationDate,NewsTitle,NewsEnglishName 
    FROM TheaterNews ORDER BY NewsCreationDate DESC) as tempA 
     UNION 
    Select * From (SELECT TOP(3) OwnerID,NewsTitle,NewsCreationDate,NewsTitle,NewsEnglishName 
    FROM MoviesNews ORDER BY NewsCreationDate DESC) as tempB 
+0

這是無效的MS-SQL語法。您將得到:'156號消息,15級,狀態1,1行 關鍵字'ORDER'.'附近的語法錯誤 – GarethD

+0

確定更新了答案 –

+0

'關鍵字'ORDER''附近的語法錯誤意味着您不能修改它通過添加這樣的別名。 –

7

order by適用於工會,而不是單獨的查詢的全部結果,這樣的結果進行排序之前top應用。

使用子查詢訂購單獨的結果:

SELECT * FROM (
    SELECT TOP(1) OwnerID,NewsTitle,NewsCreationDate,NewsTitle,NewsEnglishName 
    FROM TheaterNews 
    ORDER BY 3 DESC 
) x 
UNION 
SELECT * FROM (
    SELECT TOP(3) OwnerID,NewsTitle,NewsCreationDate,NewsTitle,NewsEnglishName 
    FROM MoviesNews 
    ORDER BY 3 DESC 
) y 
3

由於TOP子句是越來越ORDER BY子句前執行。通過嘗試這種

Select * from (SELECT TOP(1) OwnerID,NewsTitle,NewsCreationDate,  
        NewsEnglishName 
       FROM TheaterNews  ORDER BY 3 DESC) as tn 
    UNION 
    Select * From (SELECT TOP(3)  
       OwnerID,NewsTitle,NewsCreationDate,NewsEnglishName 
       FROM MoviesNews  ORDER BY 3 DESC) as mn 
    ORDER BY 3 DESC 

外訂單將責令聯合的結果

+0

我得到這個錯誤:'消息156,15級,狀態1,行3 關鍵字'UNION'附近的語法不正確。 消息156,級別15,狀態1,行中的關鍵字「ORDER'.' – Maysam

+0

子查詢需要別名近7 語法不正確。 – GarethD

+0

現在就來試試...別名人失蹤.... –