我有一个数据库,有时在“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'但具有另一个值。这些被您的逻辑过滤掉了。

10-04 10:42