2010-07-07 7 views
2

Basé sur le tableau ci-dessous et entrées:t-sql select filtre de requête

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

Les entrées sont @input_1 = 2 and @input_2 = 3 (comptage d'entrée peut varier)

Je veux sélectionner uniquement les Ids de la table ci-dessus qui ont ces deux entrées dans leurs RelatedIds correspondants.

Ainsi, sur la base des entrées donne, la sortie sera

Id 
--- 
1 
2 

Merci.

+0

Comment les entrées sont-elles transmises? Est-ce une procédure stockée? Le fait que le nombre d'entrées puisse varier est le problème le plus délicat. –

Répondre

4

essayer

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

exemple, vous pouvez exécuter

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 
+0

Ou "count (distinct relatedid)" s'il y a une possibilité de doublons. –

1

Essayez ceci:

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 

Source

Autre possibilité:

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