2016-03-25 5 views
-3

Я использую базу данных оракула и пытается выполнить следующий запрос, но он выдает ошибку:SQL многократный запрос присоединяется не работает

«Ошибка в строке 17: ORA-00904:„FRH NS "“.»: Недопустимый identifier "

В чем проблема с этим?

Ниже приводится запрос:

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 столбец таблицы и которые необходимо как столбец ns и nh потому что вы затемненный запрос так и не сделал показать нам определения таблиц.

В качестве альтернативы вы можете переместить ограничения на объединенные таблицы в условие соединения. Это не является необходимым для внутренних соединений используется, но может понадобиться, если вы хотите, чтобы изменить это на внешнее соединение:

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

Смежные вопросы