2016-03-25 54 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