![]() |
Datenbank: Sybase • Version: 12.5 • Zugriff über: ASE iSQL
WHERE-Klausel mit mehreren ODER-Bedingungen
Guten Morgen liebe Liebenden,
folgendes kleines Problemchen stellt sich meiner. Ich soll aus einer Tabelle nur die Datensätze 'rausfiltern, bei den folgende Bedingungen erfüllt sind: - bei denen der Name, Vorname oder das Geburtstdatum fehlt ODER die ID1-Nummer ODER die ID2-Nummer (d.h. wenn Name, Vorname und Geb vollständig ist, ist ok, wenn nicht, dann muss die ID1 oder die ID2 vorhanden sein) ODER - bei denen der Standort fehlt ODER - bei denen die Mitarbeiternummer UND die Kostennummer fehlt Ich habe das wie folgt versucht, aber bin leider nicht wirklich weit gekommen.
Code:
Es ist ausgeschlossen, dass in den Spalten was anders außer NULL drinne steht, da über das Programm, mit denen die Daten eingelesen wird, abgesichert wird, dass bei leeren Daten NULL 'reingeschrieben wird.
select *
from ABRECHNUNG where ((NAME IS NULL or VORNAME IS NULL or GEB_DATUM IS NULL) or (ID1 IS NULL AND ID2 IS NULL)) or STANDORT IS NULL or (MITARBEITER IS NULL and KNR IS NULL) Derzeit zeigt er mir z.B. auch alle Datensätze an, bei denen Name, Vorname und Geburtstag vollständig ist, aber halt eine der IDs fehlt, obwohl das nicht gewünscht ist. Aber auch halt andersherum, also die IDs vollständig, aber die anderen Angaben fehlen. Mein Gedanke war, dass ich ein Subselect mache, frage mich aber, ob das so zielführend ist. Jemand einen Tipp? |
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Wenn Du alle Sätze nach Vorbedingungen haben möchtest wo mindestens eine ID vorhanden ist, so verstehe ich Deine zweite Aussage im Gegensatz zu Deiner ersten Aussage:
Code:
select *
from ABRECHNUNG where (ID1 IS NOT NULL OR ID2 IS NOT NULL) AND ( ((NAME IS NULL or VORNAME IS NULL or GEB_DATUM IS NULL) or STANDORT IS NULL or (MITARBEITER IS NULL and KNR IS NULL) ) |
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Zitat:
Ich dummes Huhn hab aber gerade erkannt, dass ich es mir mal wieder schwieriger machte als notwendig. -.- Dein Code brachte mich auf den Trichter. So funktioniert es, wie ich es haben will, dass die drei fehlerhaften Testdatensätze angezeigt werden.
Code:
Ich glaube, ich sollte mir erstmal 'n Kakao machen, bevor ich Denksport betreibe.
select *
from ABRECHNUNG where ((NAME IS NULL or VORNAME IS NULL or GEB_DATUM IS NULL) abd (ID1 IS NULL AND ID2 IS NULL)) //<- hier einfach ein AND anstatt OR or STANDORT IS NULL or (MITARBEITER IS NULL and KNR IS NULL) |
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Zitat:
Code:
Das wäre eine 1:1 Übersetzung deiner Forderung. Wenn o.g. Klausel nicht stimmt, ist deine Vorgabe nicht korrekt.(1) (NAME IS NULL or VORNAME IS NULL or GEB_DATUM IS NULL) (2) OR (3) (ID1 is null) (4) OR (5) (ID2 is null) (6) OR (7) (STANDORT IS NULL) (8) OR (9) (MITARBEITER IS NULL and KNR IS NULL) |
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Es wurde doch extra noch einmal genauer erklärt:
Zitat:
|
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Ja. Was ändert das?
|
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Für mich bedeutet das doch, dass Maya schon wusste, dass sie sich evtl. missverständlich ausdrückt, und deshalb noch einmal in längerer Form die Bedingungen erklärt hat. Zu denen passt dann auch ihre letzte Abfrage.
|
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Ah. Na dann. Syntaktisch und Semantisch korrekte Negierungen sind ja auch schwierig.
(1) bei denen der Name, Vorname oder das Geburtstdatum fehlt (2) ODER (3) sowohl die ID1-Nummer als auch die ID2-Nummer, (6) ODER (7) bei denen der Standort fehlt (8) ODER (9) sowohl Mitarbeiternummer als auch die Kostennummer.
Code:
(1) (NAME IS NULL or VORNAME IS NULL or GEB_DATUM IS NULL) (2) OR (3) (ID1 is null) and (ID2 is null) (6) OR (7) (STANDORT IS NULL) (8) OR (9) (MITARBEITER IS NULL and KNR IS NULL) |
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Zitat:
Wie schon gesagt, mit meiner o.g. Lösung habe ich die richtigen Fehlerdatensätze herausfiltern können und hab's mit mehreren Testdatensätzen noch mal absichern können. Klappt jetzt wunderbar. Danke für die Tipps! |
AW: WHERE-Klausel mit mehreren ODER-Bedingungen
Beim nächsten Mal machst Du es so:
1.) Tabelle mit allen möglichen Varianten von Testdaten befüllen (Positiv- und Negativbeispiele) 2.) SELECT Abfrage mit einer Bedingung schreiben und testen 3.) Weitere Bedingung hinzufügen und testen Dabei zur Sicherheit jeden Ausdruck einzeln klammern 4.) Solange nicht fertig Goto 3.) 5.) Klammersetzung vereinfachen und jeweils wieder testen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz