SQL 左联接会根据其联接的内容排除成员?

  • 本文关键字:排除 成员 SQL sql left-join
  • 更新时间 :
  • 英文 :


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

最新更新