我有一个查询,它会在一周内返回顾问的所有约会,以及他们在该约会中销售的商品(如果尚未售出,则仍显示约会)我通过使用左外连接完成此操作约会表及其项目表。
在这种情况下,我只想显示库存中的已售商品(库存中是商品表中的字段) 如果我对物品使用'where instock true',我会松开所有没有物品销售的约会? 我是否需要以某种方式嵌套这些查询 - 如果是这样的话?谢谢
答案 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;