我有1000行,我想检查这些记录是否在表中退出,如下所示
select *
from table
where ID in ('TS145698', 'TF58964', 'TG47896', 'TS12369')
如果我输入1000个ID,我检索786的数据,我怎么知道表中没有214个ID中的哪一个?
答案 0 :(得分:1)
您可以使用模板表。
DECLARE @Template TABLE (ID NVARCHAR(50))
INSERT INTO @Template
VALUES
('TS145698'),
('TF58964'),
('TG47896'),
('TS12369')
SELECT *
FROM
@Template A LEFT JOIN
table B ON A.ID = B.ID
WHERE
B.ID IS NULL
答案 1 :(得分:1)
您可以为条件值创建表,然后左键连接到主表:
SELECT A.*, B.*
FROM [YourCriteriasTable] AS A
LEFT JOIN [table] AS B ON A.ID = B.ID
你想要的ID-s将在B. * Fields中具有空值。
答案 2 :(得分:1)
执行此操作的一种方法是将这些值输入到表参数,cte或临时表中,然后将左连接与实际表一起使用。 另一种方法是使用values子句:
创建并填充样本表(请在将来的问题中保存此步骤)
DECLARE @T as TABLE
(
Id int
)
INSERT INTO @T VALUES (1), (2), (3), (4)
查询:
SELECT v.Id
FROM (VALUES (1), (2), (3), (5), (6)) AS v(Id) -- Use this instead of the IN operator
LEFT JOIN @T T ON v.Id = T.Id
WHERE T.Id IS NULL
结果:
Id
-----------
5
6
另一种选择是使用UNION
来创建值列表:
SELECT v.Id
FROM (
SELECT 1 As Id
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
) AS v -- Use this instead of the IN operator
LEFT JOIN @T T ON v.Id = T.Id
WHERE T.Id IS NULL
答案 3 :(得分:0)
你的意思是:
select * from table where ID not in
('TS145698'
,'TF58964'
,'TG47896'
,'TS12369'
)