2016-03-25 14 views
-3

ich Oracle-Datenbank bin mit und versuchen, die folgende Abfrage laufen, aber es gibt den Fehler:SQL-Abfrage mehrere Joins arbeiten nicht

„FEHLER in Zeile 17: ORA-00904:‚FRH NS "‘.“: Ungültige Kennung "

Was ist das Problem damit?

Es folgt die Abfrage:

SELECT * 
FROM 
(SELECT * 
FROM ROOMS R 
WHERE R.Prix<'50') FRM 
JOIN 
(SELECT * 
FROM 
(SELECT * 
FROM HOTELS H 
WHERE H.CatH=2) FH 
JOIN 
(SELECT * 
FROM RESORTS R 
WHERE TypeS='montagne') FR 
ON FH.NS=FR.NS) FRH 
ON (FRH.NS=FRM.NS AND FRH.NH=FRM.NH); 

Vielen Dank im Voraus

+1

Bitte geben Sie uns zumindest einen Hinweis, was diese Tabellenstrukturen sind. Ich kann nicht ohne Details helfen. –

+1

Warum so viele Unterabfragen? Warum gehst du nicht einfach an die Tische? –

Antwort

0

Sie haben hier viel zu viele verschachtelte wählt. Ihre Anfrage kann vereinfacht werden:

SELECT * 
FROM rooms rm 
    JOIN hotels ht ON ht.ns = rm.ns AND ht.nh = rm.nh 
    JOIN resorts rs ON rs.ns = ht.ns 
WHERE rm.prix < 50 
    AND ht.cath = 2 
    AND ss.types = 'montagne'; 

Ich bin nicht ganz sicher, welche Tabellen müssen nur die ns Spalt zu verbinden mit und welche müssen sowohl die ns und nh Spalt, weil Sie Ihre Anfrage verschleiert haben so viel und taten es nicht Zeigen Sie uns die Tabellendefinitionen.

Alternativ können Sie die Einschränkungen für die verbundenen Tabellen in die Join-Bedingung verschieben. Dies ist nicht notwendig, dass der innere Joins Sie verwenden, könnte aber erforderlich sein, wenn Sie überhaupt, dass beitreten zu einem äußeren ändern möchten:

SELECT * 
FROM rooms rm 
    JOIN hotels ht ON ht.ns = rm.ns AND ht.nh = rm.nh AND ht.cath = 2 
    JOIN resorts rs ON rs.ns = ht.ns AND rs.types = 'montagne' 
WHERE rm.prix < 50; 

Sie sollten auch nicht Zahlen und Strings vergleichen. Wenn rooms.prix eine Zahlenspalte ist, ist die Bedingung R.Prix<'50' falsch. Sie müssen die Nummer mit einer Zahl vergleichen r.prix < 50