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
Bitte geben Sie uns zumindest einen Hinweis, was diese Tabellenstrukturen sind. Ich kann nicht ohne Details helfen. –
Warum so viele Unterabfragen? Warum gehst du nicht einfach an die Tische? –