You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:如何在WHERE子句中用IF ELSE或替代方法处理关联条件

解决LEFT JOIN后过滤未关联产品的问题

嘿,我完全懂你碰到的这个坑——当你把sm.magazyn = 2放在WHERE子句里时,那些在[HM].[SM]表中没有匹配记录的产品会被直接过滤掉。这是因为LEFT JOIN后,未匹配的行中sm相关字段的值都是NULL,而NULL和任何值做比较结果都是不成立的,所以这些行就被WHERE条件排除了。

要保留所有[HM].[TW]中的产品,同时只关联SM表中magazyn = 2的记录,你需要把sm.magazyn = 2这个条件从WHERE子句移到LEFT JOIN的ON子句里。这样在关联的时候就只会匹配符合条件的SM记录,而未匹配的TW产品依然会被保留下来,对应的SM字段为NULL。

修改后的查询语句如下:

select 
    tw.id as id_product, 
    tw.kod as tw_kod, 
    tw.kod as ean, 
    tw.nazwa as nazwa, 
    sm.stanHandl as stan, 
    cn.cena as cena_detaliczna 
from [HM].[TW] as tw 
join [SSCommon].[STElements] as elem on tw.znacznik = elem.Shortcut 
left join [HM].[SM] as sm on tw.id = sm.idtw and sm.magazyn = 2 -- 把条件移到这里
left join [HM].[CN] as cn on tw.id = cn.idpm 
where elem.Shortcut = '66' and elem.ElementKindId = '54' 
    --and cn.typceny = 1 (如果这个条件也导致CN未匹配的行被过滤,同样可以移到LEFT JOIN的ON里)
order by nazwa

另外补充一下:如果cn.typceny = 1这个条件也出现类似的问题(比如过滤掉没有CN表匹配的产品),你同样可以把它移到和CN表关联的ON子句中,逻辑和上面一样。

内容的提问来源于stack exchange,提问作者Vlad Seipa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:12:51