Как вы ORDER BY в запросе, используя MINUS? - PullRequest
5 голосов
/ 08 октября 2011

Я хочу ORDER BY результат запроса MINUS.

Моя первая попытка не работает:

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

Как бы вы это сделали?

упс: Я делал ORDER BY table2.foo вместо просто ORDER BY foo.Теперь это работает.

Ответы [ 3 ]

8 голосов
/ 08 октября 2011

Однако, чтобы ответить на ваш вопрос, вы можете использовать с запросом:

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 голос
/ 08 октября 2011

Вы можете использовать позицию вместо имени столбца. Предполагая, что foo является первым столбцом в результатах:

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

Обычно вы не хотите, чтобы результаты зависели от определенного порядка столбцов, поэтому я бы использовал это только для специальных запросов.

1 голос
/ 08 октября 2011

Если МИНУС был заменен на UNION, ORDER BY будет применяться к результату UNION.Вы уверены, что это не то, что вы получаете с МИНУС?

Если это не работает напрямую, то:

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

Однако я думаю, что это вряд ли будет необходимо.

...