【发布时间】:2011-08-16 09:11:20
【问题描述】:
我正在尝试对使用 LEFT JOIN 连接的两个表执行 SELECT 查询,其中连接的表中可能没有记录。比如:
--SELECT row using AreaID
SELECT *
FROM Rate
LEFT JOIN Area
ON Rate.AreaID = Area.AreaID
WHERE ProductID = @ProductID
AND Area.PostcodeOutcode = @PostcodeOutcode
这在Area表中存在@PostcodeOutcode时有效,但是如果右表中没有记录,我仍然需要返回左表中的记录。
我目前正在这样做,但我知道有更好的解决方案:
DECLARE @AreaID int
SELECT @AreaID = AreaID
FROM Area WHERE PostcodeOutcode = @PostcodeOutcode
--SELECT row using AreaID
SELECT *
FROM Rate
WHERE ProductID = @ProductID
AND
(
AreaID = @AreaID
OR (@AreaID IS NULL AND AreaID IS NULL)
)
我知道这可能很简单,但我的 SQL 知识有限。请帮忙。
谢谢
亚历克斯
【问题讨论】:
-
您明白 SELECT * 是 SQL 反模式吗?您返回的超出了您的需要(至少重复连接字段),这对性能不利。生产代码一般不应包含 select *。
标签: sql sql-server join