Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   WHERE-Klausel mit mehreren ODER-Bedingungen (https://www.delphipraxis.net/169024-where-klausel-mit-mehreren-oder-bedingungen.html)

Maya 25. Jun 2012 05:58

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:
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)
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.

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?

Bummi 25. Jun 2012 06:12

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)
)

Maya 25. Jun 2012 06:26

AW: WHERE-Klausel mit mehreren ODER-Bedingungen
 
Zitat:

Zitat von Bummi (Beitrag 1172253)
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)
)

Funktioniert leider nicht wie gewünscht. Er schmeißt zwar jetzt einen Datensatz 'raus, der sowohl Name, Vorname und Geb hat ohne IDs, aber er schmeißt auch einen Datensatz 'raus, der weder Name, noch IDs hat.

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:
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)
Ich glaube, ich sollte mir erstmal 'n Kakao machen, bevor ich Denksport betreibe.

Furtbichler 25. Jun 2012 07:34

AW: WHERE-Klausel mit mehreren ODER-Bedingungen
 
Zitat:

Zitat von Maya (Beitrag 1172252)
(1) bei denen der Name, Vorname oder das Geburtstdatum fehlt
(2) ODER
(3) die ID1-Nummer
(4) ODER
(5) die ID2-Nummer
(6) ODER
(7) bei denen der Standort fehlt
(8) ODER
(9) bei denen die Mitarbeiternummer UND die Kostennummer fehlt

Code:
 
(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)
Das wäre eine 1:1 Übersetzung deiner Forderung. Wenn o.g. Klausel nicht stimmt, ist deine Vorgabe nicht korrekt.

DeddyH 25. Jun 2012 07:47

AW: WHERE-Klausel mit mehreren ODER-Bedingungen
 
Es wurde doch extra noch einmal genauer erklärt:
Zitat:

Zitat von Maya
(d.h. wenn Name, Vorname und Geb vollständig ist, ist ok, wenn nicht, dann muss die ID1 oder die ID2 vorhanden sein)


Furtbichler 25. Jun 2012 08:01

AW: WHERE-Klausel mit mehreren ODER-Bedingungen
 
Ja. Was ändert das?

DeddyH 25. Jun 2012 08:08

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.

Furtbichler 25. Jun 2012 08:21

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)

Maya 25. Jun 2012 08:41

AW: WHERE-Klausel mit mehreren ODER-Bedingungen
 
Zitat:

Zitat von DeddyH (Beitrag 1172266)
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.

Bingo. Es ist echt doof manchmal, wenn man ganz genau weiß, was man will, aber nicht weiß, wie man es korrekt ausdrückt. Daran haperte es wahrscheinlich auch, dass ich nicht zeitnah die richtige Lösung fand.

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!

shmia 25. Jun 2012 15:04

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 06:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz