фильтр запросов t-sql select - PullRequest
2 голосов
/ 07 июля 2010

На основании приведенной ниже таблицы и входных данных:

Id  RelatedId
--------------
1   1
1   2
1   3
2   2
2   3 
2   4
3   5

Входы @input_1 = 2 and @input_2 = 3 (количество входов может варьироваться)

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

Таким образом, исходя из заданных входных данных, результат будет

Id
---
1
2

Спасибо.

Ответы [ 2 ]

4 голосов
/ 07 июля 2010

try

select id
from YourTable
where relatedid in ( @input_1, @input_2)
group by id
having count(*) >=2 -- for 3 inputs, make this 3 etc

пример, который вы можете запустить

create table #yourtable(Id int,  RelatedId int)

insert #yourtable values(1,1)
insert #yourtable values(1,2)
insert #yourtable values(1,3)
insert #yourtable values(2,2)
insert #yourtable values(2,3)
insert #yourtable values(2,4)
insert #yourtable values(3,5)


declare @input_1 int, @input_2 int
select @input_1 = 2,@input_2 = 3

select id
from #yourtable
where relatedid in ( @input_1, @input_2)
group by id
having count(*) >=2
1 голос
/ 07 июля 2010

Попробуйте это:

SELECT Id FROM tableName 
INNER JOIN (SELECT @input_1 AS id 
   UNION SELECT @input_2,
   UNION SELECT @input_3) inputs
ON inputs.id = tableName.Id

Источник

В качестве альтернативы:

BEGIN
  DECLARE @inputs TABLE( id tinyint )
  INSERT INTO @inputs SELECT @input_1
  INSERT INTO @inputs SELECT @input_2
  INSERT INTO @inputs SELECT @input_3

  SELECT * FROM tableName
  INNER JOIN @inputs i ON i.id = tableName.Id
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...