我正在尝试将三张桌子连接在一起,但在获得正确结果方面遇到了问题。
下面的查询并未显示我想要的所有结果 - 只显示有关联航班的结果。所以第一个问题是如何在没有飞行的情况下包括结果。
晚上有助于了解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'
由于
答案 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'加入它们 也可以帮助和简化事情