SQL Self Join返回非匹配记录

时间:2014-06-10 16:05:18

标签: sql sql-server sql-server-2008

使用SQL Self Join,我试图返回与where condition匹配的非匹配记录。

select RxNum,image from OeImage 
where   RxNum in ('100','200','300')

在表OeImage中,我的值为100,300。我没有200的价值。

如何使用自联接返回不可用的记录,而输入值则通过参数传递。

1 个答案:

答案 0 :(得分:0)

如果您尝试搜索的不存在的值列表较小,则可以使用UNION ALL,如下所示:

SELECT *
FROM (
    SELECT '100' RxNum
    UNION ALL
    SELECT '200'    
    UNION ALL   
    SELECT '300'
    ) myList
WHERE NOT EXISTS (
        SELECT *
        FROM OeImage
        WHERE RxNum = myList.RxNum
        )

如果元素列表很长或在多个查询中需要,您可以使用Temp Table variable,如下所示:

DECLARE @myList TABLE (RxNum NVARCHAR(50))

INSERT INTO @myList
VALUES ('100')
    ,('200')
    ,('300')

SELECT *
FROM @myList
WHERE NOT EXISTS (
        SELECT *
        FROM OeImage
        WHERE RxNum = @myList.RxNum
        )