Я думаю, что ap вы принимаете:
- Получить
dcode
для водителей на маршруте Барселона до Мадрида. Назовем это Set1.
- Получить
dcode
для водителей на маршруте Мадрид в Барселону. Назовем это Set2.
- Наконец, получить
dname
для водителей, dcode
в обоих Set1 и SEt2.
Ваш запрос для Set1 является:
SELECT dcode FROM ride WHERE rcode IN (
SELECT rcode FROM route WHERE departure = 'Barcelona' AND arrival = 'Madrid'
)
На тех же строках запроса для Set2 будет:
SELECT dcode FROM ride WHERE rcode IN (
SELECT rcode FROM route WHERE departure = 'Madrid' AND arrival = 'Barcelona'
)
Наконец, вам нужно получить dcode
, что это вSet1 & inSet2. Это будет перевести на запрос:
SELECT dname FROM driver WHERE
dcode IN (
SELECT dcode FROM ride WHERE rcode IN (
SELECT rcode FROM route WHERE departure = 'Barcelona' AND arrival = 'Madrid'
)
)
AND
dcode IN (
SELECT dcode FROM ride WHERE rcode IN (
SELECT rcode FROM route WHERE departure = 'Madrid' AND arrival = 'Barcelona'
)
)
В запросе, вместо того, чтобы искать dcode
в двух сетах, вы искали rcode
в двух сетах.
Рекомендации по улучшению: Для получения запросов dcode
наборы, вы можете использовать внутреннее соединение вместо использования вложенных запросов. Пример:
SELECT dcode FROM ride INNER JOIN route ON ride.rcode = route.rcode
WHERE departure = 'Barcelona' AND arrival = 'Madrid'
Вызывает ли ваш запрос сообщение об ошибке или не возвращает никаких результатов? Я предполагаю, что существует несколько маршрутов с тем же rcode, который должен быть возвращен. – hines