Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

etwas kompliziertere Abfrage

Begonnen von henfoni, Januar 06, 2012, 12:56:12

⏪ vorheriges - nächstes ⏩

henfoni

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!

     
Wer nicht fragt, bleibt dumm.

ebs17

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

ebs17

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

henfoni

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
Wer nicht fragt, bleibt dumm.

ebs17

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

henfoni

Perfekt! Vielen Dank, wieder was dazu gelernt :)
Wer nicht fragt, bleibt dumm.

ebs17

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