用于返回空记录的SQL外连接问题

时间:2016-02-19 20:23:46

标签: sql sql-server-2008-r2 left-join

DECLARE @Temp TABLE (Region VARCHAR(75))
INSERT INTO @Temp
SELECT distinct classname from x where class = 'y' and date = '12/31/2015'

SELECT *
FROM @Temp T LEFT OUTER JOIN x N ON N.Classname = T.Region where T.Region NOT LIKE '%Cash%'
AND N.[Code] = '785' 
AND N.Horizon = 'year'
AND N.[date] = '12/31/2015'

这必须返回Temp中的所有类名,包括x中没有记录的类名。至少这是我的意图。没有临时和相同条件的X,只返回它有数据的那些。我希望Temp中的所有类名都没有X中的条目。它仍然没有这样做。

无法解决它。尝试不存在,除外和外适用。他们都没有工作。请帮忙!

1 个答案:

答案 0 :(得分:1)

您需要将第二个表上的条件移动到on子句中:

SELECT *
FROM @Temp T LEFT OUTER JOIN
     x N
     ON N.Classname = T.Region AND
        N.[Code] = '785' AND
        N.Horizon = 'year' AND
        N.[date] = '2015-12-31'
WHERE T.Region NOT LIKE '%Cash%';

假设date存储为日期,请使用适当的ISO标准日期格式进行查询。