我有一个数据库,有时在“GHS_ItemStoreHandle”表中为特定商品编号定义语言条目,有时却没有。为什么第一个查询返回的项目少于第二个查询?都不应该都返回等于“语言”表中活动语言数量的行数吗?
SELECT l.NativeName, l.Id, i.ItemNumber, i.StoreHandle FROM Language l
LEFT JOIN GHS_ItemStoreHandle i ON l.Code = i.Lang_Code
WHERE l.Active = 1 AND
(i.ItemNumber = 'MM1-931' OR i.ItemNumber IS NULL)
ORDER BY l.NativeName;
SELECT l.NativeName, l.Id, l.Active FROM Language l
WHERE l.Active = 1
ORDER BY l.NativeName;
最佳答案
您需要ON
子句中的条件,而不是WHERE
子句中的条件:
SELECT l.NativeName, l.Id, i.ItemNumber, i.StoreHandle
FROM Language l LEFT JOIN
GHS_ItemStoreHandle i
ON l.Code = i.Lang_Code AND i.ItemNumber = 'MM1-931'
WHERE l.Active = 1
ORDER BY l.NativeName;
您的版本返回意外结果的原因是,有时
i
不具有MM1-931'
但具有另一个值。这些被您的逻辑过滤掉了。