2010-04-07 6 views
0

Disons que j'ai une table contenant des données suivantes:Récupérer séquence de données de différentes colonnes

| id | t0 | t1 | t2 | 
______________________ 
| 1 | 4 | 5 | 6 | 
| 2 | 3 | 5 | 2 | 
| 3 | 6 | 4 | 5 | 
| 4 | 4 | 5 | 9 | 
| 5 | 14 | 5 | 49 | 

Je veux récupérer toutes les lignes contenant 4, 5, 6 (quelle que soit la position des chiffres dans les tableaux) , donc ligne 1 & ligne 3 sera sélectionné. Comment faire cela avec une requête SQL?

La table contient des milliers d'enregistrements.

Répondre

7

Vous pouvez le faire comme ceci:

select * 
from table 
where 4 in (t0, t1, t2) 
    and 5 in (t0, t1, t2) 
    and 6 in (t0, t1, t2) 
0

Vous pouvez toujours le faire à la "dure":

select * 
    from tbl 
where (t0 = 4 AND t1 = 5 AND t2 = 6) 
    or (t0 = 5 AND t1 = 6 AND t2 = 4) 
    or (t0 = 6 AND t1 = 4 AND t2 = 5) 
0

Un autre "dur" façon:

DECLARE @table TABLE (id int, t0 int, t1 int, t2 int) 

INSERT INTO @table(id, t0, t1, t2) VALUES(1, 4, 5, 6) 
INSERT INTO @table(id, t0, t1, t2) VALUES(2, 3, 3, 2) 
INSERT INTO @table(id, t0, t1, t2) VALUES(3, 6, 4, 5) 
INSERT INTO @table(id, t0, t1, t2) VALUES(4, 4, 5, 5) 

SELECT * 
FROM @table 
WHERE (t0+t1+t2) = 15 
    AND t0 BETWEEN 4 AND 6 
    AND t1 BETWEEN 4 AND 6 
    AND t2 BETWEEN 4 AND 6 
    AND t0 <> t1 
+2

5+ 5 + 5 fait aussi 15 :) – Mercurybullet

+0

+1 @ Mercurybullet. J'aurais besoin de t0 <> t1 (etc.) pour vérifier que la solution de WoLpH inclut. Réparera. – Dane

Questions connexes