我有一个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表中的信息
答案 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