SQL 服务器 - 当条件可能为空时如何进行内部连接?

SQL Server - How to do Inner Join when condition could be empty?

我试图在一个带有内部连接的查询中直接从我的工厂 AddressID 中获取国家/地区。我的问题是 AddressID 可能是一个空字符串。

我如何检查并执行某种异常或类似操作?如果地址 ID 为空,我需要一个空字符串作为 f.Country.

的结果

这是我目前的查询,但如果 AddressID = '' 那么该行不会显示在我的结果中。

SELECT o.FactoryID,o.Name,o.Rating,o.ProductCategory,o.Emissions,o.LatestChanges,o.AddressID,o.ProductTags,f.Country 
FROM FactoryHistory o
INNER JOIN AddressHistory f on f.AddressID = o.AddressID
WHERE NOT o.LatestChanges = 'Deleted' AND o.IsCurrent = 1 AND f.IsCurrent = 1

我的问题中有什么遗漏或不清楚,请告诉我!

left join:

SELECT o.FactoryID, o.Name, o.Rating, o.ProductCategory, o.Emissions, o.LatestChanges, o.AddressID, o.ProductTags, f.Country 
FROM FactoryHistory o
LEFT JOIN AddressHistory f on f.AddressID = o.AddressID AND f.IsCurrent = 1
WHERE NOT o.LatestChanges = 'Deleted' AND o.IsCurrent = 1

如果你仍然想过滤掉 AddressID 不是 null 的工厂(假设 empty 你的意思是 null)和地址 table 中不存在的,那么您可以在 WHERE 子句中添加条件:

WHERE 
    NOT o.LatestChanges = 'Deleted' 
    AND o.IsCurrent = 1 
    AND (o.AddressID IS NULL OR f.AddressID IS NOT NULL)

用否定可能更清楚:

WHERE 
    NOT o.LatestChanges = 'Deleted' 
    AND o.IsCurrent = 1 
    AND NOT (o.AddressID IS NOT NULL AND f.AddressID IS NULL)