une question de requête imbriquée dans mysql
-
19-09-2019 - |
Question
Je suis en train d'apprendre les requêtes imbriquées dans MySQL et je suis coincé tout en sélectionnant tous les hôtels qui sont 30 miles de la ville et ont des chambres qui coûtent 150 $
Je peux choisir les chambres qui sont 30 miles de la ville et coûte 150 avec cette requête, mais ne peut pas atteindre les hôtels.
(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 |
+------+--------+
La solution
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
Autres conseils
Je ne sais pas pourquoi vous voulez utiliser les requêtes imbriquées ici. Pourquoi ne pas faire quelque chose comme ça?
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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow