2010-01-11 4 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