SQL第1列表IN第2列

时间:2011-12-21 15:22:34

标签: sql sql-server-2005

SQL Server 2005。

我有2个名单:

  1. ('a','b','c','d')

  2. ('d','e','f','g')

  3. 我需要在动态SQL字符串中使用这两个子句创建一个WHERE子句,如:

     select *
     from tbl
     where ... afewconditionshere ...
          AND anyitemfrom[('a', 'b', 'c', 'd')] is inside [('d', 'e', 'f', 'g')]
    
    它看起来有点奇怪,但我从第三方获得这些数据,无法做出太大的改变

    列表总是有<

    中有20个项目

    更新

    a,b,c,d,e,f,g就像是以任何方式与桌子无关的安全事物,这个想法是如果你有这个来自[('a','b','c) ','d')]在[('d','e','f','g')里面,然后你就可以查看返回的记录,否则不应该返回任何记录

    是的,这个条件基本上应该返回true或false

4 个答案:

答案 0 :(得分:0)

根据你的问题,似乎你在过滤后的数据集上执行了一个IN(),然后是第二个IN(),你应该得到你想要的东西:

select * from
(
select * from tbl
where ... afewconditionswhere ...
and anyitemfrom in('a', 'b', 'c', 'd')
) as derived
where derived.anyitemfrom in ('d', 'e', 'f', 'g')

答案 1 :(得分:0)

declare @cmd varchar(2000), @list1 varchar(100), @list2 varchar(100)

select @list1 = "('a', 'b', 'c', 'd')", @list2 = "('d', 'e', 'f', 'g')"

select @cmd =
'select * from
(
select * from tbl
where ... afewconditionswhere ...
and anyitemfrom in ' + @list1 + '
) as derived
where derived.anyitemfrom in ' + @list2


exec(@cmd)

答案 2 :(得分:0)

我想通了

我使用了类似的东西:

 CREATE TABLE #t (UserName VARCHAR(50))

 DECLARE @sql VARCHAR(MAX)
 SELECT @sql = 'INSERT INTO #t SELECT ''' + REPLACE(@UserList, ',', ''' UNION SELECT ''') + ''''
 PRINT (@sql)
 EXEC (@sql)

 SELECT * FROM #t

 IF OBJECT_ID('tempdb..#t') IS NOT NULL BEGIN DROP TABLE #t END
两个列表都是

然后我就可以加入它们,并使用join的recordcount

答案 3 :(得分:0)

 WHERE (
        SELECT COUNT(*)
          FROM ( select 'a' union all select 'b' union all select 'c' union all select 'd'
                 intersect
                 select 'd' union all select 'e' union all select 'f' union all select 'g'
               )
       ) > 0