SQL Server 2005。
我有2个名单:
('a','b','c','d')
('d','e','f','g')
我需要在动态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
答案 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