如何检查查询的IN子句中的所有值是否存在于表的列中

时间:2016-02-10 12:20:42

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

我有一个要求,我需要检查SQL Server表的一列中是否存在IN子句的所有值。

我怎样才能找到这个?

我正在尝试这样的事情。

IF NOT EXISTS (
        SELECT NULL
        FROM workflow_attributes
        WHERE attribute_name IN (
                'Mukund_Test_1'
                ,'Mukund_Test_2'
                ,'Mukund_Test_3'
                )
        )
BEGIN
    PRINT 'not exist'
END
ELSE
BEGIN
    PRINT 'exists'
END

2 个答案:

答案 0 :(得分:3)

一种方法是使用GROUP BYCOUNT()(或COUNT(DISTINCT)):

IF 3 = (SELECT COUNT(DISTINCT attribute_name)
        FROM workflow_attributes
        WHERE attribute_name IN ('Mukund_Test_1', 'Mukund_Test_2', 'Mukund_Test_3')
       )
BEGIN
    PRINT 'exists'
END
ELSE
BEGIN
    PRINT 'not exists'
END

答案 1 :(得分:0)


Declare @tbl as table (attribute_name varchar(100))
insert into @tbl values ('Mukund_Test_1'),('Mukund_Test_2'),('Mukund_Test_3') 
IF EXISTS (
        SELECT 1
        FROM workflow_attributes w left join @tbl t on w.attribute_name = t.attribute_name
        WHERE t.attribute_name is null
        )
BEGIN
    PRINT 'not exist'
END
ELSE
BEGIN
    PRINT 'exists'
END