Tedi Geschrieben 6. Juli 2021 Teilen Geschrieben 6. Juli 2021 Hallo an Alle Ich hätte gern ein Tipp um besser zu selektieren. Ich habe die folgende Tabelle correspondance Article | Dept A1 | 123 A1 | 456 A1 | 987 A2 |456 B1 | 123 B1 | 987 C3| 123 Ich möchte alle Artikel aus dept 123 ohne die aus dept 456 select * from correspondance where dept = '123' and dept != '456'; ich dachte ich würde sowas bekommen Article | Dept B1 | 123 C3 | 123 stattdessen habe ich folgendes Article | Dept A1 | 123 B1 | 123 C3| 123 Den Select habe ich auch probiert ohne Erfolgt select * from correspondance where dept = '123' and article in( select article from correspondance where dept = '123' or dept = '456'); Danke für eure Hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tobi_8 Geschrieben 6. Juli 2021 Teilen Geschrieben 6. Juli 2021 (bearbeitet) Vielleicht ist das blödsinn, aber probier mal: SELECT * FROM correspondance WHERE dept = '123' AND NOT article IN(SELECT article FROM correspondance WHERE dept = '456') Bearbeitet 6. Juli 2021 von Tobi_8 JimTheLion und Tedi reagierten darauf 2 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tedi Geschrieben 6. Juli 2021 Autor Teilen Geschrieben 6. Juli 2021 Danke Sehr für deine Hilfe Tobi. War kein Blödsinn ganz im Gegenteil😉 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
el_pollo_diablo Geschrieben 6. Juli 2021 Teilen Geschrieben 6. Juli 2021 (bearbeitet) vor 4 Stunden schrieb Tedi: Article | Dept A1 | 123 B1 | 123 C3| 123 mal absehen davon, dass dieses Ergebnis vollkommen richtig ist, da deine Testdaten nun einmal drei Artikel mit dept 123 enthalten, wird für die Abfrage weder ein Subselect ala AND NOT article IN(SELECT article FROM correspondance WHERE dept = '456') noch irgendeine andere Einschränkung als where dept = '123' benötigt, da dies bereits alle anderen dept-werte ausschliesst. Hier vielleicht noch auf den Tabellenaufbau (Spaltentyp) und die Syntax des DBMS achten, ob man bei numerischen Werten überhaupt Anführungszeichen benötigt. Abhängig davon kann man dann auch einen Subselect verwenden, um gezielt die Artikeln mit verschiedenen dept-Werten zu selektieren: SELECT * FROM correspondance WHERE dept IN ('123', '987', '432') Bearbeitet 6. Juli 2021 von el_pollo_diablo Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JimTheLion Geschrieben 7. Juli 2021 Teilen Geschrieben 7. Juli 2021 vor 11 Stunden schrieb el_pollo_diablo: mal absehen davon, dass dieses Ergebnis vollkommen richtig ist, da deine Testdaten nun einmal drei Artikel mit dept 123 enthalten Eh... nur so lange man den zweiten Aspekt der Anforderung ignoriert: "Artikel die nicht in Dept 456 sind". Article A1 ist sowohl Dept 123 als auch Dept 456 zugeordnet - soll deshalb also nicht zur Ergebnismenge gehören. Man kann das auch anders implementieren (Geschmackssache), aber die Lösung von Tobi trifft schon den Kern des Problems. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
el_pollo_diablo Geschrieben 7. Juli 2021 Teilen Geschrieben 7. Juli 2021 vor 13 Stunden schrieb PVoss: Eh... nur so lange man den zweiten Aspekt der Anforderung ignoriert: "Artikel die nicht in Dept 456 sind". Article A1 ist sowohl Dept 123 als auch Dept 456 zugeordnet - soll deshalb also nicht zur Ergebnismenge gehören. Der Artikel A1 aus Dept 456 ist doch auch nicht im Ergebnis enthalten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JimTheLion Geschrieben 8. Juli 2021 Teilen Geschrieben 8. Juli 2021 Bei der Tabelle handelt es sich um eine Zuordnungstabelle. A1 kommt zwei mal vor, steht aber für nur eine Entität, welche zu zwei Depts zugeordnet ist. Eine der beiden Zuordnungen verstößt gegen die Filterkriterien, deshalb darf die Entität A1 nicht im Ergebnis sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.