Цикл SQL Server в SProc для генерации запроса - PullRequest
1 голос
/ 05 октября 2011

Мне нужно создать запрос, который принимает список целых чисел и объединяет несколько SELECT с INTERSECT с использованием SQL Server 2008 R2.Вот в основном запрос, который мне нужно построить, но число SELECTS будет различным:

SELECT col1
FROM table1
WHERE col2 = 1

INTERSECT

SELECT col1
FROM table1
WHERE col2 = 2

INTERSECT

SELECT col1
FROM table1
WHERE col2 = 3

У меня есть табличная функция, которая возьмет список идентификаторов, разделенных запятыми, и создаст из них таблицу.,Но в основном мне нужно пройти через эту табличную функцию, чтобы построить инструкцию SQL, а затем выполнить ее.

Как мне создать этот цикл?Или, возможно, есть лучший способ сделать это (я могу сделать это в коде, если это будет лучше)?

РЕДАКТИРОВАТЬ: Чтобы уточнить цель использования INTERSECT, вот что я делаю.Структура, которую я использую, предназначена для связи родительских продуктов с дочерними продуктами на основе выбора атрибутов (размер, цвет и т. Д.).Для каждой комбинации атрибутов существует один соответствующий дочерний продукт.Таким образом, каждый выбор выбирает все дочерние продукты, сопоставленные с отдельным значением атрибута.Затем я должен найти пересечение каждого из них, чтобы найти один дочерний продукт, который соответствует этой комбинации атрибутов.Если есть лучший способ сделать запрос, я открыт для него.Я знаю, что внутренние объединения будут иметь тот же результат, но все равно потребуют такой же итерации.

1 Ответ

2 голосов
/ 05 октября 2011

Предполагается, что временная таблица называется #temp:

SELECT col1
  FROM table1 t
       INNER JOIN
       #temp v
       ON (t.col2 = v.col2)
GROUP BY
       col1
HAVING COUNT(*) = (SELECT COUNT(*) FROM #temp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...