2016-07-08 15 views
0

Ich möchte alle Details aus einer Tabelle PROD über Zeilen sammeln, die bestimmte Triplet-Sätze von Werten enthalten. Zum Beispiel möchte ich alle Daten in den Zeilen mit den Spalten (ID, NBR UND COP_I) mit den Werten (23534, 99, 0232) und (3423,5,09384) usw. erhalten. Ich habe Version 1 versucht, aber nur gibt mir ein paar solcher Reihen, wenn ich weiß, dass es 100 geben muss und Version 2 in einen Fehler läuft. Ich konnte mir keinen anderen Weg vorstellen, dies zu tun.Auswählen von Zeilen basierend auf mehreren WHERE-Bedingungen

Version 1:

SELECT * FROM PROD 

WHERE 

ID IN (2534, 3423) 

AND NBR IN (99, 5) 

AND COP_I IN (0232, 09384) 

Version 2:

SELECT * FROM PROD 

WHERE 

    (ID = '23534', NBR ='99', COP_I ='0232'), 
AND (ID = '3423', NBR ='5', COP_I ='09384') 

aktualisieren:

ich zur Zeit so etwas wie erhalten:

ID  NBR_IN COP_I FLAG TYPE  DATE 
23534 99  0232 0  CATHAY 15-04-2017 

Und bekomme nicht die Reihe (3423, 5, 09384). Im Grunde erscheinen nur einige der Tripelreihen in den Ergebnissen und die Ergebnisse entsprechen denen, die ich von Version 1 oben erhalten habe.

Danke

Antwort

1

Ich denke, Sie sollten eine OR Bedingung verwenden.

SELECT * FROM PROD 
WHERE (ID = '23534' AND NBR ='99' AND COP_I ='0232') 
OR (ID = '3423' AND NBR ='5' AND COP_I ='09384') 
+0

I scheinen die gleichen Ergebnisse zu bekommen, wie ich es bekommen habe, als ich "Version 1" in meiner Frage verwendet habe. Hätten Sie eine Idee, warum diese Abfrage nicht funktioniert? – Jojo

+1

einige Beispieldaten und das erwartete Ergebnis würde helfen. –

+0

Ich fügte einige Beispieldaten hinzu und erklärte weiter, was mein erwartetes Ergebnis ist. – Jojo

1

Ihre zweite Abfrage außer entlang dem richtigen Weg würde, dass Sie benötigen die AND mit einem OR und die , s mit AND s zu ersetzen.

SELECT * 
FROM PROD 
WHERE 
    (ID = '23534' AND NBR ='99' AND COP_I = '0232') 
OR 
    (ID = '3423' AND NBR ='5' AND COP_I = '09384') 
+0

Ich habe das seltsamste Problem, bei dem viele der Zeilen, die bestimmten Triplets entsprechen, nicht angezeigt werden. Kannst du dir vorstellen, warum das so ist? – Jojo

+0

@Jojo sind Sie sicher, dass die Daten das sind, was Sie denken, dass es ist? – user1666620

+0

Es tut mir leid, ich bin mir nicht sicher, was Sie mit dieser Frage meinen. – Jojo

0

Sie eine Abfrage wie die folgende verwenden:

SELECT p.* 
FROM PROD AS p 
INNER JOIN (
    SELECT 23534 AS col1, 99 AS col2, 232 AS col3 UNION ALL 
    SELECT 3423,   5,   9384 
) AS t ON p.ID = t.col1 AND p.NBR = t.col2 AND p.COP_I = t.col3 
0

je nachdem, wie viele Wertepaare diese müssen Sie möglicherweise mit dem tun, und Ihr RDBMS, könnten Sie so etwas tun:

create table #tempThingy (ID int, NBR int, COP_I int) 

insert into #tempThingy (id, nbr, cop_i) 
select 23534, 99, 0232 
union all select 3423, 5, 09384 

select * 
from prod p 
inner join #tempThingy t on p.id = t.id 
    and p.nbr = t.nbr 
    and p.cop_i = t.cop_i 
1

Sie können Drillinge wie folgt angeben:

SELECT * FROM PROD 
WHERE (id, nbr, cop_i) IN (('23534','99','0232'), ('3423','5','09384')); 
+0

Danke, aber diese Antwort scheint einen Fehler zu erzeugen. – Jojo

+0

Hmmm. Ich habe es in Oracle versucht und es funktioniert gut. Welche RDBMS verwenden Sie? –

+0

Oh okay. Ich benutze Toad Datapoint für Oracle. – Jojo

Verwandte Themen