Entwickler-Ecke

Datenbanken - Hilfe bei einem SELECT der Werte ausschließen soll


OliverN_26 - Di 02.10.12 09:16
Titel: Hilfe bei einem SELECT der Werte ausschließen soll
Hallo

Ich habe ein Problem mit einem SELECT.
Ausgangssituation:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  id   artikel   status    tk   serial
-----------------------------------------------
  1    10001     Eingang   1    1_dsjghsdjghrtb
  2    10002     Eingang   1    2_sajjwerqewvjg
  3    10003     Eingang   1    3_dsksatwetvwh5
  4    10002     Ausgang   1    2_sajjwerqewvjg
  5    10002     Eingang   1    2_fqwkrrvrtiweh
  6    10001     Ausgang   1    1_dsjghsdjghrtb
  7    10003     Eingang   1    3_farjqwhrjqweh
  8    10001     Eingang   1    1_dsakfjthwevuu
  9    10001     Eingang   1    1_salaskfrejewt


In der Test-Tabelle möchte ich für jeden Artikel die Seriennummern haben, welche den status = 'Eingang' und nicht 'Ausgang' haben. Sobald also eine Seriennummer (je Artikel) den status = 'Ausgang' hat, soll sie in der Ergebnismenge nicht auftauchen.

Ergebnis sollte dann so aussehen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
  id   artikel   status    tk   serial
-----------------------------------------------
  3    10003     Eingang   1    3_dsksatwetvwh5
  5    10002     Eingang   1    2_fqwkrrvrtiweh
  7    10003     Eingang   1    3_farjqwhrjqweh
  8    10001     Eingang   1    1_dsakfjthwevuu
  9    10001     Eingang   1    1_salaskfrejewt


Ich tu mich etwas schwer mit dem rausfiltern. WENN ich schreibe:

Quelltext
1:
SELECT * FROM test WHERE status = 'Eingang' AND NOT status = 'Ausgang'                    

lässt er ja nur den status 'Ausgang' weg. Da die Seriennummer aber durch diesen status nicht mehr gültig ist, muß die id mit dem 'Eingang' auch raus.
Ich hoffe ihr könnt mir helfen und ich hab mich nicht zu undeutlich ausgesprochen.

Vielen Dank im voraus.

Oliver


bummi - Di 02.10.12 09:39

aus dem Kopf, ohne es mit einer DB zu testen

Quelltext
1:
SELECT * FROM test WHERE not Exists(Select * from test t2 where t2.status='Ausgang' and t2.artikel=test.artikel)                    


mandras - Di 02.10.12 09:39


Quelltext
1:
select * from test where serial not in (select serial from test where status='Ausgang')                    

(Zeigt alle Sätze, bei denen zur Serial kein "Ausgang" vorliegt)


OliverN_26 - Di 02.10.12 09:58

Perfect. Ich danke euch. Genau was ich gesucht habe :-)