2016-12-01 3 views
0

Ich möchte alle Daten aus zwei Tabellen mit Join und Paging der Abfrage erhalten, so dass immer 10 Zeilen vorhanden sind. Mein erstes Problem ist, dass es nur funktioniert, wenn meine Seitenzahl 1 ist, ohne den Join. Mein zweites Problem (das wahrscheinlich gelöst wird, wenn ich das erste Problem auflöse) ist, dass es nicht einmal funktioniert, wenn die Seitenzahl 1 ist, wenn es eine Verbindung gibt. Das ist meine Abfrage:Parameter und Join in Oracle SQL

SELECT * FROM 
(
    SELECT INNER_TABLE.*, ROWNUM r 
    FROM (
     SELECT details.*, extras.* FROM d_table details, e_table extras 
     WHERE SYSDATE - details.UPDATE_DATE < 60 
     ORDER BY details.UPDATE_DATE DESC 
    ) INNER_TABLE 
    WHERE ROWNUM < (:pageNum * :PerPage + 1) 
) 
WHERE r >= (((:pageNum - 1) * :perPage) +1); 

Es funktioniert ohne den Beitritt nur auf Seite 1. Ich verstehe nicht, warum es so funktioniert. Wenn jemand mein Problem teilen kann oder warum bin ich dumm, bitte antworten Sie. Vielen Dank im Voraus.

BEARBEITEN: Jede Seitennummer außer eins gibt ein leeres Ergebnis zurück. Man gibt zurück, was es sollte.
EDITEDIT: Das obige gilt nur, wenn die Abfrage ohne Join ausgeführt wird. Mit dem Join bekomme ich einen Fehler: "column ambiguously defined".

+0

Was meinen Sie mit "es funktioniert nicht, wenn es eine Verbindung gibt". Sie erhalten einen Fehler? Leeres Ergebnis? –

+0

Entschuldigung. Bearbeitet .. –

+0

Sind Sie sicher, dass Sie die tatsächliche Abfrage gepostet haben, die Sie verwenden? 'ORDER BY details.UPDATE_DATE <60 'ist keine legale Syntax in Oracle ... –

Antwort

0

Das Problem mit meiner Abfrage ist, dass es nicht die "Details. , Extras." mit "INNER_TABLE. *" Erhalten konnte. Meine Vermutung ist, dass es nicht erkennen könnte, was das * in INNER_TABLE bedeutet. Also verwendet die Lösung alle Feldnamen anstelle des '*' irgendwo in der Abfrage.