2016-04-05 2 views
0

ich die folgende Abfrage haben:PL SQL verwenden ORDER BY in UNION-Abfrage

SELECT 
    USERS.*, 
    ROWNUM AS RANK , 
    4101 AS TOTAL 
FROM 
    ((
     SELECT 
      * 
     FROM 
      USER_LIST 
     WHERE 
      USER_LIST.USR_ID = 1) 
     UNION(
     SELECT 
      * 
     FROM 
      USER_LIST) 
    ) USERS 

Welche ganz gut funktioniert, ich möchte die Ergebnisse über 'ORDER BY' sortieren. Ich habe versucht, die 'ORDER BY' vor der letzten Klammer (vor den Benutzern), aber ich bekomme einen Fehler, bitte beraten, wie kann ich 'ORDER BY' in dieser Abfrage verwenden.

Danke.

+2

Try ') NUTZER Ordnen nach ...' –

+1

Nur etwas nicht-verwandten Sache meiner Meinung nach kam, nachdem Sie den Code gesehen zu haben. Ich glaube, es wäre viel effizienter, wenn Sie "UNION ALL" anstelle von "UNION" verwenden und einfach die gewünschte "USR_ID" von der zweiten Unterabfrage ausschließen (z. B. 'WHERE USER_LIST.USR_ID! = 1'). Dies würde den Index plus verwenden, um die Vergleichsergebnissätze dieser beiden Unterabfragen loszuwerden. "UNION" erweitert die Zeit der Abfrageausführung erheblich, wenn größere Ergebnismengen verglichen werden (manchmal sogar, wenn weniger als hundert Datensätze abgerufen werden). – AndrewMcCoist

Antwort

2

Sie müssen definieren order by nach alias.

SELECT USERS.*, 
     ROWNUM AS RANK, 
     4101 AS TOTAL 
FROM ((SELECT * FROM USER_LIST WHERE USER_LIST.USR_ID = 1) UNION (SELECT * FROM USER_LIST)) USERS ORDER BY ...