你如何使用MINUS在查询中进行ORDER BY?

时间:2011-10-08 16:43:11

标签: oracle sql-order-by

我想ORDER BY MINUS查询的结果。

我的第一次尝试不起作用:

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

你会怎么做?

oops:我正在ORDER BY table2.foo而不仅仅是ORDER BY foo。现在它有效。

3 个答案:

答案 0 :(得分:8)

但是,要回答您的问题,您可以使用with with query:

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 :(得分:1)

如果MINUS被UNION取代,则ORDER BY将应用于UNION的结果。你确定这不是你用MINUS得到的吗?

如果不能直接使用,那么:

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

但是,我认为这不太可能是必要的。

答案 2 :(得分:1)

您可以使用位置而不是列名称。假设foo是结果中的第一列:

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

您通常不希望结果依赖于特定的列顺序,因此我只会将其用于adhoc查询。