如何检索表中未包含的值?

时间:2019-09-21 09:30:33

标签: sql sql-server

我有一个excel(10000)值:'8000217','8000508','8000608','8000712','8014705'等... 我想知道它是否存在于我的表中(如果不存在,我将其发送出去) 如果存在则无法插入同一张表

我尝试过:

SELECT Esa 
FROM
    (SELECT 'Test 1' UNION
     SELECT 'Test 2' UNION
     SELECT 'Test 3') [TABLE]
WHERE Esa NOT IN (SELECT Esa FROM[TABLE];

但我不能,该请求无效。

我希望查询返回给我那些不在SQL表中的信息

3 个答案:

答案 0 :(得分:1)

将以下代码与除外一起使用,这将有助于插入逻辑

SELECT Esa into [TABLE3] from (
    select 'Test 1' as esa union
    select 'Test 2' union
    select 'Test 3' )  [TABLE]
except 
SELECT Esa from (
    select 'Test 1' esa 
    ) [TABLE1]

select * from [TABLE3]

drop table [TABLE3]

答案 1 :(得分:0)

由于您的数据与目标表之间似乎存在1-1基数,因此LEFT JOIN反模式看来是一个很好的用例:尝试合并两个数据集,并返回不包含它们的数据集匹配:

SELECT Esa 
FROM (
    SELECT 'Test 1' AS Esa UNION ALL SELECT 'Test 2' UNION ALL SELECT 'Test 3'
) [DATA]
LEFT JOIN [TABLE] ON [TABLE].Esa = [DATA].Esa
WHERE [TABLE].Esa IS NULL

另一个典型的选择是使用具有NOT EXISTS条件的相关子查询:

SELECT Esa 
FROM (
    SELECT 'Test 1' AS Esa 
    UNION ALL SELECT 'Test 2'
    UNION ALL SELECT 'Test 3'
) [DATA]
WHERE NOT EXISTS (
    SELECT 1 FROM [TABLE] WHERE [TABLE].Esa = [DATA].Esa
)

答案 2 :(得分:0)

这是您要找的吗?有多种方法可以做到这一点。 (未试用)

declare @ValueToTest int = 8000217

if exists (select 1 from YourTable where ESA = @ValueToTest)
   begin
      print 'It is in the table'
   end
else
   begin
      print 'It is not in the table'
   end

或者,如果您将值放入表中,则可以使用where null子句保留联接,以获取表中未包含的值。

select testvalues.ESA
from testvalues
left outer join existingTable on testvalues.ESA = existingTable.ESA
where existingTable.ESA is null