2010-01-11 7 views
1

Je suis en train d'apprendre les requêtes imbriquées dans MySQL et je suis bloqué tout en sélectionnant tous les hôtels qui sont 30 miles de la ville et ont des chambres qui coûtent 150 $une question de requête imbriquée dans une base MySQL

je peux choisi 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. Je ne suis pas sûr pourquoi vous voulez utiliser des requêtes imbriquées ici

(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 | 
+------+--------+ 

Répondre

1
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 
3

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 
+0

bien mon but est de résoudre cela avec les requêtes imbriquées:) – iva123