SQL Server:过滤大量数据

时间:2016-08-04 12:07:43

标签: sql sql-server

我有1000行,我想检查这些记录是否在表中退出,如下所示

select * 
from table 
where ID in ('TS145698', 'TF58964', 'TG47896', 'TS12369')

如果我输入1000个ID,我检索786的数据,我怎么知道表中没有214个ID中的哪一个?

4 个答案:

答案 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'
             )