Moin,
ich habe ein alt (bekanntes) Problem.
Ich möchte bestimmte Datensätze auslesen, aber schaffe es einfach nicht die richtigen abzugreifen.
Ich skizzierte mal eben wie die DB aussieht:
ID1 ID2 ID3 Datum
1 A 1 tt-mm-jjjj
1 A 2 tt-mm-jjjj
1 B 1 tt-mm-jjjj
1 B 1 tt-mm-jjjj
2 A 1 tt-mm-jjjj
2 B 1 tt-mm-jjjj
2 B 1 tt-mm-jjjj
2 B 3 tt-mm-jjjj
Die Datumsfelder sind immer unterschiedlich.
Ich möchte jetzt alle ID1 ausgeben, bei denen es keine Tupel der Form ID1=x, ID2=A, ID3=2 gibt. Im obigen Beispiel würde er mir also ID1=1 ausgeben.
Mit Count kann man leider nicht arbeiten, da die Anzahl der Tupel zu einer ID1 nicht vorhersagt kann. Es kann vorkommen, dass es etliche Tupel gibt, die alle ID1=2, ID2=B, ID3=1 haben und sich nur im Datum unterscheiden.
Ich verzweifle wirklich an der Sache. Wäre super, wenn jemand erstmal versteht, was überhaupt mein Problem ist und mir dann sogar noch helfen kann ;)
Danke schon mal!
Verstehst Du selber Deine Aufgabe?
Zitat... ID1 ausgeben, bei denen es keine Tupel der Form ID1=x, ID2=A, ID3=2 gibt. Im obigen Beispiel würde er mir also ID1=1 ausgeben.
vs.
1 A 2 tt-mm-jjjj
MfGA
ebs
Anders herum würde ich an so etwas denken:
SELECT T.ID1
FROM Tabelle T LEFT JOIN
(SELECT ID1 FROM Tabelle WHERE ID2 = 'A' AND ID3 = 2) X
ON T.ID1 = X.ID1
WHERE X.ID1 Is Null
MfGA
ebs
Hey,
danke für deine Antworten. Ja ich bin etwas verwirrt, ich meinte im Beispiel soll er ID1=2 ausgeben. Hatte mich vertippt.
Deine Abfrage ist gut!
Aber das Ding ist, eigentlich stehen die Informationen in 2 Tabellen. Ich habe dann eine Abfrage, die die beiden TAbellen joint als Grundlage für meine eigentliche Abfrage gemacht, aber das klappt irgendwie nicht ganz! Es geht nur, wenn ich das WHERE ID2 = 'A' AND ID3 = 2 weglasse..
Also im Grund genommen sehen meine Tabellen so aus:
Tabelle Nachricht:
Nachricht_ID Schnitt_ID Anwendung
1 1 Anwendung1
2 3 Anwendung1
3 1 Anwendung2
4 2 Anwendung2
5 3 Anwendung2
Tabelle Schnitt:
Schnitt_ID Extpartner_KZ Schnittart_KZ
1 moin schnitt1
2 moin schnitt2
3 servus schnitt1
4 servus schnitt2
Ich suche nun Anwendungen, die die Schnitt_ID 1 haben, jedoch nicht die Schnitt_ID 2. Also oben die Anwendung1.
Gruß henf
SELECT DISTINCT T.Anwendung
FROM tblNachricht AS T
WHERE T.Schnitt_ID = 1
AND NOT EXISTS
(SELECT Null FROM (SELECT N.Anwendung
FROM tblNachricht AS N
WHERE N.Schnitt_ID = 2) AS X
WHERE X.Anwendung = T.Anwendung)
MfGA
ebs
Perfekt! Vielen Dank, wieder was dazu gelernt :)
Einfacher denken und lösen ist aber nicht verboten:
SELECT DISTINCT T.Anwendung
FROM tblNachricht AS T
WHERE T.Schnitt_ID = 1
AND NOT EXISTS
(SELECT Null
FROM tblNachricht AS N
WHERE N.Schnitt_ID = 2
AND N.Anwendung = T.Anwendung);
MfGA
ebs