2016-03-25 50 views
-3

我使用Oracle數據庫,並試圖運行下面的查詢,但它給人的錯誤:SQL查詢多個聯接不工作

「錯誤在第17行:ORA-00904:‘FRH NS「’」:無效標識符「

它有什麼問題?

以下是查詢:

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); 

在此先感謝

+1

請至少告訴我們這些表結構是什麼。不能沒有任何細節。 –

+1

爲什麼這麼多的子查詢?你爲什麼不簡單加入表格? –

回答

0

你有太多的嵌套選擇這裏。您的查詢可以簡化爲:

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'; 

我不能完全肯定這表需要只使用ns柱接合,並且同時需要nsnh列,因爲你已經模糊查詢了這麼多,也沒向我們展示表格定義。

或者,您可以將連接表上的限制移動到連接條件中。這是沒有必要的內部連接您正在使用,但可以根據需要,如果你想改變這種狀況到外部聯接:

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; 

你也應該沒有比較數字和字符串。假設rooms.prix是一個數字列,條件R.Prix<'50'是錯誤的。您需要將該數字與數字進行比較r.prix < 50