LEFT JOIN中AND过滤条件失效,返回不符合条件数据的问题求助
问题原因
你用的LEFT JOIN里,ON子句中的al.service_d = 222只会控制右表(docloc)能不能匹配左表的行,不会过滤左表(vendor_location)本身的数据。也就是说,哪怕左表中service_d不等于222,这些行还是会被返回,只是对应的docloc.loc_id会是NULL,这就是你看到不符合条件数据的原因。
解决方法
如果你的需求是只返回service_d = 222的数据,把条件移到WHERE子句里就能过滤掉左表中不符合条件的行:
SELECT top 10 al.prsnpk,al.serviceid, al.locid al_loc_id, docloc.loc_id doc_loc_id from vendor_location al LEFT JOIN (SELECT DISTINCT locid FROM dorder_location) docloc ON al.locid = docloc.Locid WHERE al.service_d = 222
要是你想保留左表所有行,但仅当service_d = 222时才尝试关联右表,那原SQL逻辑没问题,但你得自行判断是否保留那些service_d≠222的行——不需要的话就用上面的写法。
内容的提问来源于stack exchange,提问作者Dreamer
相关产品推荐
相关产品推荐

