添加左连接后SQL查询丢失结果

时间:2010-12-03 12:45:50

标签: sql left-join

我正在尝试将三张桌子连接在一起,但在获得正确结果方面遇到了问题。

下面的查询并未显示我想要的所有结果 - 只显示有关联航班的结果。所以第一个问题是如何在没有飞行的情况下包括结果。

晚上有助于了解web_bookings有一个名为'flights'的列,它是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'

由于

3 个答案:

答案 0 :(得分: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)并查看其工作原理。

不确定您使用的是什么数据库,但是您应该能够制定一个解释计划(或者不是什么),它会向您显示瓶颈点,以便您可以提高速度。

答案 1 :(得分:1)

你实际上是用你的fp.dest_cheapest where子句'撤消'左连接(使它成为一个内连接)。

答案 2 :(得分:0)

尝试编写三个单选查询并使用'UNION'加入它们  也可以帮助和简化事情

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