Bezdepbonusu7Программирование: статьи и ответы

Вопрос

SQL-запрос теряет результаты после добавления левого соединения

Автор вопроса: TomОтветов: 3

Я пытаюсь объединить три таблицы вместе, но у меня возникают проблемы с получением правильных результатов.

В приведенном ниже запросе показаны не все мои желаемые результаты, а только те, где есть связанный рейс. Итак, первая проблема заключается в том, как также включить результаты без перелета.

Ночью полезно знать, что в web_bookings есть столбец с именем "рейсы", который может быть либо Y, либо N.

SELECT wb.booking_ref
FROM web_bookings wb
LEFT JOIN prod_info pi ON wb.location = pi.location
LEFT JOIN flight_prices fp ON (wb.inc_flights = 'Y' AND fp.dest_date = (pi.dest_airport + ' ' + wb.sort_date))
WHERE fp.dest_cheapest = 'Y' AND wb.customer = '12345'

Спасибо

sqlleft-join

Ответы

Ответ 1 · рейтинг 3 · Harrison

это предложение where, fp.dest_cheapest = 'Y' вызывает эффект сужения (y ‹> null)

чтобы обойти это, поместите предложение fp в левое соединение как таковое

SELECT wb.booking_ref
FROM web_bookings wb
LEFT JOIN prod_info pi ON wb.location = pi.location
LEFT JOIN flight_prices fp ON (wb.inc_flights = 'Y' AND fp.dest_date = (pi.dest_airport +  ' ' + wb.sort_date))
and fp.dest_cheapest = 'Y'

WHERE wb.customer = '12345'

что касается скорости, проверьте свои индексы (убедитесь, что местоположение, inc_flights проиндексировано) и посмотрите, как это работает.

Не уверен, какую базу данных вы используете, но вы должны иметь возможность сделать план объяснения (или что-то еще), который покажет вам узкие места, чтобы вы могли увеличить скорость.

Ответ 2 · рейтинг 1 · n8wrl

По сути, вы "отменяете" левое соединение (делая его внутренним соединением) с вашим предложением fp.dest_cheapest where.

Ответ 3 · Ruben

попробуйте написать три запроса с одним выбором и используйте "UNION", чтобы присоединиться к ним, это также может помочь и упростить задачу.

http://www.w3schools.com/sql/default.asp

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы