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)
我试图在一个带有内部连接的查询中直接从我的工厂 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)