объединить запрос с условной проверкой в sql

0

Я пытаюсь получить некоторые данные из нескольких таблиц, используя запрос соединения. У меня есть таблица резервирования, где я храню "идентификатор местоположения пикапа" и "Идентификатор местоположения места" и другую таблицу "местоположение", где хранятся имена местоположений. Я пытаюсь получить имя местоположения (место захвата и падения) в 2 разных переменных из таблицы "местоположение" с этими двумя идентификаторами из таблицы резервирования.

У меня есть таблицы со следующими параметрами. Таблица местоположений: "locations_deatils" имеет location_name location_id. Таблица резервирования: reservation_cars имеет идентификатор pickup_location, идентификатор drop_location, дату pick_up, drop_date

SELECT l.location_name as pick-up_loc, 
       l.location_name as drop_loc, 
       c.pickup_date, 
       c.return_date, 
FROM locations_deatils l inner join 
     reservation_cars c on l.locations_id = c.pickup_location and l.locations_id 
= c.return_location 
WHERE c.pickup_date >= :pickupTime and c.return_date <=:returnTime;
  • 1
    А какой у тебя вопрос? Что-нибудь еще не работает? Или вы даже получаете сообщение об ошибке?
  • 3
    Предоставьте структуры таблиц для всех таблиц, связанных с SHOW CREATE TABLE [table] Также предоставьте пример данных в виде таблицы данных ascii. Или предоставьте sqlfiddle.com или db-fiddle.com со структурами таблиц и примерами данных. Также предоставьте ожидаемый вывод в виде таблицы данных ascii. Трудно создать запрос SQL из обратного инжиниринга другого запроса SQL и некоторого текста без примеров данных.
Теги:

2 ответа

0
Лучший ответ

Вам нужно сделать отдельное соединение для пикапа и для места падения.

SELECT l1.location_name as 'pick-up location', l2.location_name as 'drop location', pickup_date, return_date
FROM reservation_cars r
JOIN locations_deatils l1 ON l1.locations_id = r.pickup_location
JOIN locations_deatils l2 ON l2.locations_id = r.return_location
WHERE r.pickup_date >= :pickupTime 
  AND r.drop_date <= :returnTime
  • 0
    Это работает для меня, спасибо
0

Возможно, вы имели в виду нечто подобное:

SELECT p_loc.location_name AS pickup_location,
       cars.pickup_date,
       d_loc.location_name AS drop_location,
       cars.return_date
FROM   reservation_cars cars
JOIN   location_details p_loc
  ON   cars.pickup_location = p_loc.location_id
JOIN   location_details d_loc
  ON   cars.return_location = d_loc.location_id
WHERE  .....

Возможно, вам придется использовать outer join в случае, если настройки пикапа и/или возврата не установлены (пока).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню