SQL - 左连接问题

时间:2010-10-05 17:00:39

标签: sql sql-server

SELECT 
  tb1.booking_ref, tb1.investor, tb2.cost, tb3.product 
FROM 
  tb1, tb3 LEFT JOIN tb2 
ON
  tb1.booking_ref = tb2.booking_ref 
AND 
  tb1.investor = tb2.investor 
AND 
  tb1.investor = '12345'
WHERE
  tb1.location = tb3.location

上面的查询错误是因为对tb3的引用 - 没有它们就很好。

有没有人知道为什么?

3 个答案:

答案 0 :(得分:7)

SELECT 
  tb1.booking_ref, tb1.investor, tb2.cost, tb3.product
FROM 
  tb1
      inner join tb3
          on tb1.location = tb3.location
      left join tb2 
          on tb1.booking_ref = tb2.booking_ref
              and tb1.investor = tb2.investor 
WHERE tb1.investor = '12345'

答案 1 :(得分:0)

而不是在WHERE子句中,将tb1.location = tb3.location添加到ON / AND子句中。

在更新问题之前回答:
是的,它会 您在哪里说明了表tb3tb1tb2之间的关系?对于连接,您需要在这些表中的某些列之间建立关系。

HTH!

答案 2 :(得分:0)

这可能会对您有所帮助:

SELECT t1.booking_ref, t1.investor, t.cost, t.product
FROM tb1 t1
CROSS APPLY(
    SELECT t2.cost, t3.product 
    FROM tb3 t3 
    LEFT JOIN tb2 t2 ON (t1.booking_ref = t2.booking_ref  
                    AND t1.investor = t2.investor  
                    AND  t1.investor = '12345')
) AS t

PS: - 至少你需要SQL Server 2005。