我想执行一个SELECT查询连接到一个LEFT JOIN连接表中可能没有记录的两个表上。喜欢的东西:SQL Server - 选择左连接NULL记录在哪里条件
--SELECT row using AreaID
SELECT *
FROM Rate
LEFT JOIN Area
ON Rate.AreaID = Area.AreaID
WHERE ProductID = @ProductID
AND Area.PostcodeOutcode = @PostcodeOutcode
这工作时,在区表中存在@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 *。 – HLGEM