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

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

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

Ночью полезно знать, что в 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'

Спасибо


person Tom    schedule 03.12.2010    source источник


Ответы (3)


это предложение 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 проиндексировано) и посмотрите, как это работает.

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

person Harrison    schedule 03.12.2010

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

person n8wrl    schedule 03.12.2010

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

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

person Ruben    schedule 03.12.2010