2016-08-25 1 views
0

Ich benutze Oracle 10g-Datenbank. Ich habe eine Datentabelle mit den folgenden Daten:SQL WHERE IN zwei Spalte mit bestimmten Kombinationen

name  groupid subgroupid 
checklist1 1  12 
checklist2 1  4 
checklist3 2  4 

Meine Frage:

select * from checklist 
where groupid IN (1, 2) AND subgroupid IN (12, 4); 

Das Ergebnis, das ich erhalte:

name  groupid subgroupid 
checklist1 1  12 
checklist2 1  4 
checklist3 2  4 

Das Ergebnis, das ich will:

name  groupid subgroupid 
checklist1 1  12 
checklist3 2  4 

könnte ich tun:

Ich könnte das oben aber in meinem bare tun, dass ich einen langen und unreinen Code für den Abfrage-String erstellen müsste, der ausgeführt werden soll. Gibt es einen sauberen und Verknüpfung Weg spezifischere Daten zu erhalten, die ich für die Verwendung der Kombination von groupid suchen und subgroupid

+0

Was ist die Beziehung zwischen Gruppe und Untergruppe? –

+0

Warum nicht 'checklist2 1 4'? –

Antwort

2

Einige Datenbanken unterstützen Tupel Operationen für in, so dass Sie tun können:

where (groupid, subgroupid) IN ((1, 12), (2, 4)) 

Sie don‘ Wenn Sie erwähnen, welche Datenbank Sie verwenden, ist dies eine Möglichkeit.

Andernfalls sind die expliziten Vergleiche eine sinnvolle Option.

Oder alternativ ein join auf eine abgeleitete Tabelle, die wie folgt aussehen könnte:

select cl 
from checklist cl join 
    (select 1 as groupid, 12 as subgroupid union all 
     select 2, 4 
    ) x 
    on cl.groupid = x.groupid and cl.subgroupid = x.subgroupid; 
+0

Oracle 10g ist die Datenbank –

0

Ihre Hilfe von CTE auch nutzen können.

With cte_grp 
AS 
(select 1 as GroupId, 12 as SubGroupId 
    UNION 
    select 2, 4 
) 
SELECT c.* 
FROM checklist c 
    JOIN cte_grp cg on c.GroupId=cg.GroupId 
     AND c.SubGroupId=cg.SubGroupId 
Verwandte Themen