AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken WHERE-Klausel mit mehreren ODER-Bedingungen
Thema durchsuchen
Ansicht
Themen-Optionen

WHERE-Klausel mit mehreren ODER-Bedingungen

Ein Thema von Maya · begonnen am 25. Jun 2012 · letzter Beitrag vom 26. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#1

WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 05:58
Datenbank: Sybase • Version: 12.5 • Zugriff über: ASE iSQL
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?
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 06:12
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)
)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 06:26
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.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Alt 25. Jun 2012, 07:21     Erstellt von Medium
Dieser Beitrag wurde von TBx gelöscht. - Grund: OT
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 07:34
(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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 07:47
Es wurde doch extra noch einmal genauer erklärt:
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)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 08:01
Ja. Was ändert das?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 08:08
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 08:21
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)
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 08:41
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!
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

AW: WHERE-Klausel mit mehreren ODER-Bedingungen

  Alt 25. Jun 2012, 15:04
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
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
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