2011-10-08 147 views
5

我想ORDER BYMINUS查詢的結果。在使用MINUS的查詢中,你如何使用ORDER BY?

我第一次嘗試不起作用:

SELECT * 
FROM Table1 
MINUS 
SELECT * 
FROM table2 
WHERE table2.foo = 'bar' 
ORDER BY foo 

你會怎麼做呢?

oops:我在做ORDER BY table2.foo而不只是ORDER BY foo。現在它可以工作。

+0

他們都是同一張桌子我猜?所以你爲什麼使用減號? – frail

+0

對不起,不好的例子。我改了它 – ladookie

+0

你在做什麼基本上是一個昂貴的操作,需要全表掃描。所以如果您可以發佈一些示例數據,也許可以通過連接來解決(取決於數據)並且您是否需要所有數據?你可以有一個限制,可以避免全表掃描 – frail

回答

8

然而,要回答你的問題,你可以使用與查詢:

with tmp_minus as (
    SELECT * 
    FROM Table1 
    MINUS 
    SELECT * 
    FROM table2 
    WHERE table2.foo = 'bar' 
) 
select * from tmp_minus 
ORDER BY foo 

你也應該能夠做到一個子查詢:

select * from (
    SELECT * 
    FROM Table1 
    MINUS 
    SELECT * 
    FROM table2 
    WHERE table2.foo = 'bar' 
) tmp_minus 
ORDER BY foo 
1

如果減號是由UNION取代, ORDER BY將適用於UNION的結果。你確定這不是你用MINUS得到的嗎?

如果它不直接工作,那麼:

SELECT result.* 
    FROM (SELECT * 
      FROM Table1 
     MINUS 
     SELECT * 
      FROM table2 
     WHERE table2.foo = 'bar') AS result 
ORDER BY foo; 

不過,我覺得這是不太可能是必要的。

1

您可以使用位置而不是列名稱。假設foo是在結果第一列:

SELECT * 
FROM Table1 
MINUS 
SELECT * 
FROM table2 
WHERE table2.foo = 'bar' 
ORDER BY 1 

你通常不想要的結果取決於特定的列順序,所以我只會用這個即席查詢。