我想ORDER BY
MINUS
查询的结果。在使用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
。现在它可以工作。
我想ORDER BY
MINUS
查询的结果。在使用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
。现在它可以工作。
然而,要回答你的问题,你可以使用与查询:
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
如果减号是由UNION取代, ORDER BY将适用于UNION的结果。你确定这不是你用MINUS得到的吗?
如果它不直接工作,那么:
SELECT result.*
FROM (SELECT *
FROM Table1
MINUS
SELECT *
FROM table2
WHERE table2.foo = 'bar') AS result
ORDER BY foo;
不过,我觉得这是不太可能是必要的。
您可以使用位置而不是列名称。假设foo是在结果第一列:
SELECT *
FROM Table1
MINUS
SELECT *
FROM table2
WHERE table2.foo = 'bar'
ORDER BY 1
你通常不想要的结果取决于特定的列顺序,所以我只会用这个即席查询。
他们都是同一张桌子我猜?所以你为什么使用减号? – frail
对不起,不好的例子。我改了它 – ladookie
你在做什么基本上是一个昂贵的操作,需要全表扫描。所以如果您可以发布一些示例数据,也许可以通过连接来解决(取决于数据)并且您是否需要所有数据?你可以有一个限制,可以避免全表扫描 – frail