Я пытаюсь объединить три таблицы вместе, но у меня возникают проблемы с получением правильных результатов.
В приведенном ниже запросе показаны не все мои желаемые результаты, а только те, где есть связанный рейс. Итак, первая проблема заключается в том, как также включить результаты без перелета.
Ночью полезно знать, что в 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'
Спасибо
Ответ 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 проиндексировано) и посмотрите, как это работает.
Не уверен, какую базу данных вы используете, но вы должны иметь возможность сделать план объяснения (или что-то еще), который покажет вам узкие места, чтобы вы могли увеличить скорость.