【问题标题】:SQL Join not filtering as expected SSMSSQL Join 未按预期过滤 SSMS
【发布时间】:2020-12-16 03:57:11
【问题描述】:

我有这个查询,我需要返回与协议和应用程序相关的贡献,但排除协议状态不正确的贡献

select * from contributions c
left join agreements as ag on ag.Id = c.AgreementId and ag.status in (1,2,3,4)
left join applications as ap on ap.Id = c.ApplicationId

此当前查询不包括协议详细信息,但仍返回贡献行。我不确定“and”子句是否符合我的预期?

【问题讨论】:

    标签: sql sql-server join


    【解决方案1】:

    如果要使用OUTER JOIN'ed table从主表中排除记录,则需要使用WHERE子句中的条件,如下所示:

    select * from contributions c
    left join agreements as ag on ag.Id = c.AgreementId 
    left join applications as ap on ap.Id = c.ApplicationId
    where ag.status in (1,2,3,4) or ag.status is null
    

    这将返回所有contributions 不存在的agreement 或者如果agreement 存在则agreement 应该在status 中具有status 1,2,3,4

    【讨论】:

    • 当我尝试移动 where 子句时没有进行空值检查,所以得到了意想不到的结果!感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2019-08-15
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多