SQL любой из 1-го списка В 2-й - PullRequest
       7

SQL любой из 1-го списка В 2-й

1 голос
/ 21 декабря 2011

SQL Server 2005.

У меня есть 2 списка:

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

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

Мне нужно сделать предложение WHERE с этими 2 внутридинамическая строка SQL, что-то вроде:

 select *
 from tbl
 where ... afewconditionshere ...
      AND anyitemfrom[('a', 'b', 'c', 'd')] is inside [('d', 'e', 'f', 'g')]

это выглядит довольно странно, но я получаю эти данные от третьих лиц, не могу внести слишком большие изменения

списки всегда будут иметь <20 элементоввнутри </p>

ОБНОВЛЕНИЕ

a, b, c, d, e, f, g подобны вещам безопасности, никак не связанным с таблицей, идея в том, что если у вас есть этот элемент из [('a', 'b', 'c', 'd')] находится внутри [('d', 'e', ​​'f', 'g')], после чего вы можете просмотреть возвращенные записи, в противном случаеникакие записи не должны быть возвращены

да, это условие должно в основном возвращать true или false

Ответы [ 4 ]

0 голосов
/ 21 декабря 2011
 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
0 голосов
/ 21 декабря 2011
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)
0 голосов
/ 21 декабря 2011

Я понял это

Я использовал что-то вроде:

 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

для обоих списков, тогда я смог присоединиться к ним и использовать учетную запись объединения

0 голосов
/ 21 декабря 2011

Исходя из вашего вопроса, кажется, что если вы выполните один 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...