2010-01-11 67 views
1

我想了解在mysql中嵌套查询和我被困在选择所有酒店 这是从城市30英里,且有房,成本150 $MySQL中的嵌套查询问题

我可以选择了距离城市30英里的房间,使用此查询花费150美元,但无法到达酒店。

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

回答

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

我不知道你为什么要在这里使用嵌套查询。为什么不做这样的事情?

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

以及我的目的是用嵌套查询来解决这个问题:) – iva123 2010-01-11 17:01:12