【问题标题】:Using a where statement against left outer join对左外连接使用 where 语句
【发布时间】:2014-03-22 08:43:34
【问题描述】:

我有一个查询,它返回一个顾问在一周内的所有约会,以及他们在那个约会时售出的物品(如果没有售出,它仍然显示约会)我已经通过使用左外连接来完成此操作约会表和项目表。

在这种情况下,我只想显示已售出的库存商品(库存是商品表中的一个字段) 如果我对物品使用“库存真实”,我会取消所有没有售出物品的约会? 我是否需要以某种方式嵌套这些查询 - 如果是这样,如何?谢谢

【问题讨论】:

  • 也许你应该发布你当前的查询

标签: sql sql-server nested outer-join


【解决方案1】:

您想要做的关键是将股票的条件从where 子句移至on 子句。大概,您现有的查询看起来像这样:

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;

【讨论】:

  • 谢谢 - 这正是我所需要的,(我不知道 ON 子句,一直使用 WHERE)
【解决方案2】:

您应该使用 ON 而不是 WHERE。这样,如果商品没有库存,则不会匹配,并且您加入的正确部分将为 NULL。

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

如果我有您尝试编写的 SQL,我会更准确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多