Eine verschachtelte Abfragefrage in MySQL
-
19-09-2019 - |
Frage
Ich versuche verschachtelte Abfragen in MySQL zu lernen und ich stecke fest, während ich alle Hotels, die 30 Meilen von der Stadt entfernt sind, ausgewählt habe und Räume haben, die 150 $ kosten
Ich kann die Räume, die 30 Meilen von der Stadt entfernt sind, auswählen und mit dieser Abfrage 150 kostet, aber die Hotels nicht erreichen.
(select id from Rooms where cost = 150 and id in
(select r_id from has_rooms where name IN (select name from is_at where l_town in
(select town from Location where distance_from_city = 30))));
Rooms
+----+------+---------+
| id | cost | type |
+----+------+---------+
| 1 | 100 | kral |
| 2 | 0 | kralice |
| 3 | 150 | padisah |
| 4 | 150 | hop |
| 5 | 150 | boss |
+----+------+---------+
has_rooms
+------+------+
| r_id | name |
+------+------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | A |
| 3 | A |
+------+------+
is_at
+------+----------+
| name | l_town |
+------+----------+
| A | istanbul |
| B | izmir |
| C | kars |
| D | adana |
+------+----------+
select * from Location;
+--------------------+----------+----------------+----------+
| distance_from_city | postcode | street | town |
+--------------------+----------+----------------+----------+
| 30 | NULL | KENNEDY Street | istanbul |
| 35 | NULL | NULL | kars |
| 40 | NULL | Tenesse | izmir |
| 50 | NULL | NULL | adana |
+--------------------+----------+----------------+----------+
Hotel
+------+--------+
| name | rating |
+------+--------+
| A | 5 |
| B | 5 |
| C | 4 |
| D | 1 |
+------+--------+
Lösung
SELECT h.*
FROM hotel h
JOIN is_at ia
ON ia.name = h.name
JOIN location l
ON l.town = ia.town
WHERE EXISTS
(
SELECT NULL
FROM rooms r
JOIN has_rooms hr
ON hr.r_id = r.id
WHERE hr.name = h.name
AND r.cost = 150
)
AND distance_from_city <= 30
Andere Tipps
Ich bin mir nicht sicher, warum Sie hier verschachtelte Fragen verwenden möchten. Warum nicht so etwas tun?
SELECT h.name
FROM rooms r
, has_rooms h
, is_at i
, location l
, hotel o
WHERE r.cost = 150
AND h.r_id = r.id
AND i.name = h.name
AND i.l_town = l.town
AND l.distance_from_city = 30
AND i.name = o.name
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow