2011-10-08 18 views
5

Quiero ORDER BY el resultado de una consulta MINUS.¿Cómo ORDEN EN una consulta usando MINUS?

Mi primer intento no funciona:

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

¿Cómo hacerlo?

oops: Estaba haciendo ORDER BY table2.foo en lugar de solo ORDER BY foo. Ahora funciona.

+0

ambos son la misma mesa, supongo? Entonces, ¿por qué usas menos? – frail

+0

lo siento, mal ejemplo. Lo cambié – ladookie

+0

lo que está haciendo es básicamente una operación costosa, requiere escaneo completo de la tabla. entonces, si puede publicar algunos datos de ejemplo, tal vez se pueda resolver con una unión (dependiendo de los datos) ¿Y necesita todos los datos? ¿puede tener un límite que evite el escaneo completo de tabla? – frail

Respuesta

8

Sin embargo, para responder a su pregunta, se puede utilizar una con consulta:

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

También debe ser capaz de hacer una subselección:

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

Si el MENOS fueron reemplazados por UNION, la ORDEN BY se aplicaría al resultado de la UNIÓN. ¿Estás seguro de que eso no es lo que obtienes con MINUS?

Si no funciona directamente, entonces:

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

Sin embargo, creo que esto es poco probable que sea necesario.

1

Puede usar la posición en lugar del nombre de la columna. Suponiendo que foo es la primera columna de los resultados:

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

Normalmente no desea que los resultados dependen en un orden de columnas específicas, por lo que sólo podría utilizar esto para consultas ad hoc.

Cuestiones relacionadas