对左外连接使用where语句

时间:2014-03-22 08:43:34

标签: sql sql-server nested outer-join

我有一个查询,它会在一周内返回顾问的所有约会,以及他们在该约会中销售的商品(如果尚未售出,则仍显示约会)我通过使用左外连接完成此操作约会表及其项目表。

在这种情况下,我只想显示库存中的已售商品(库存中是商品表中的字段) 如果我对物品使用'where instock true',我会松开所有没有物品销售的约会? 我是否需要以某种方式嵌套这些查询 - 如果是这样的话?谢谢

2 个答案:

答案 0 :(得分:0)

您应该使用ON而不是WHERE。这样,如果物品没有库存,则不会匹配,并且您的连接的右侧部分将为NULL。

SELECT A.*, S.* FROM appointments A LEFT JOIN sells S ON ... AND sells.instock = 1;

如果我有你试过写的SQL,我会更精确。

答案 1 :(得分:0)

您要执行的操作的关键是将库存条件从on子句移至where子句。据推测,您现有的查询看起来像这样:

select <whatever>
from appointments a left join
     sells s
     on a.appointmentid = s.appointmentid 
where s.instock = 1;

where子句正在将left join变为inner join。如果不匹配,则instock的值为NULL,与1不匹配。解决方案是将条件移动到on子句:

select <whatever>
from appointments a left join
     sells s
     on a.appointmentid = s.appointmentid and
        s.instock = 1;