2016-03-25 18 views
-3

çalışma ve aşağıdaki sorguyu çalıştırmak çalışıyor ama hata veriyor değil birleşimler:SQL sorgusu birden ben Oracle veritabanını kullanıyorum

"hat 17'de HATA: ORA-00904: 'FRH NS"'.": Geçersiz belirleyici "

Sorun nedir? Burada yol çok sayıda iç içe seçer sahip peşin

+1

ile karşılaştırmanız gerekmektedir. Lütfen en azından bu tablo yapılarının ne olduğuna dair bir ipucu verin. Ayrıntılar olmadan yardımcı olamaz. –

+1

Neden bu kadar çok alt sorgu var? Neden tablolara katılmıyorsun? –

cevap

0

yılında

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

Teşekkür:

ardından

sorgusu olur. Seni çok Sorgunuzla Karartılmış ve vermedi çünkü ns ve nh sütun hem ihtiyaç tablolar sadece ns kolon kullanılarak katıldı gereken hangi tamamen emin değilim ve hangi

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

: Sorgunuzda basitleştiirlebilir Tablo tanımlarını göster.

Alternatif olarak, birleştirilen tablolardaki kısıtlamaları birleştirme durumuna taşıyabilirsiniz. İç Hiç bir dış o değiştirmek istiyorsanız kullandığınız rağmen gerekli olabilir katılır için bu gerekli değildir katılmak:

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; 

Ayrıca sayılar ve dizeleri karşılaştırmak gerekir. rooms.prix'un bir sayı sütunu olduğunu kabul ederseniz, R.Prix<'50' durumu yanlıştır. Numarayı r.prix < 50