AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Im Select null oder Wert in WHERE

Im Select null oder Wert in WHERE

Ein Thema von Kostas · begonnen am 26. Jan 2020 · letzter Beitrag vom 27. Jan 2020
Antwort Antwort
Seite 2 von 2     12
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Im Select null oder Wert in WHERE

  Alt 27. Jan 2020, 09:59
Zitat:
ja das ist voll Krank nur weil das SQL damals nicht sauber umgesetzt wurde.
Warum wurde der Vergleich auf NULL anders behandelt als der Vergleich mit einem Wert
Weil NULL kein Wert ist.
ist schon klar, ich kritisiere hier NUR den unterschied zwischen abfrage geben null und abfrage gegen Wert.
Adresse = 'XY'
Adresse = null
Adresse is null warum wurde hier "is" und nicht "=" implementiert. Also Adresse = null. Damit hätte man nur ein Variante des Vergleichs.

Durch die Fallunterscheidung muss man daran denken dass auch gegen null verglichen werden könnten und müsste das SQL anpassen wie auch vom himitsu vorgeschlagen
z.B.: ((STRASSE IS NULL AND :STRASSE IS NULL) OR (STRASSE = :STRASSE)) oder über Macros das SQL dynamisch aufbauen.
Ist meiner Meinung nach völlig unnötig.

Denn wenn man nicht daran denkt, funktioniert der Vergleich nicht!

Code:
SELECT ADRESSID
FROM ADRESSEN
WHERE VORNAME = :VORNAME
  AND NACHNAME = :NACHNAME
  AND STRASSE = :STRASSE
  AND PLZ = :PLZ
  AND ORT = :ORT


if mdQuelle.FieldByName('STRASSE').IsNull
then qrZiel.ParamByName('STRASSE').Clear
else qrZiel.ParamByName('STRASSE').AsString := mdQuelle.FieldByName('STRASSE').AsString;



Gruß Kostas
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Im Select null oder Wert in WHERE

  Alt 27. Jan 2020, 10:24
Es ist schon ungewöhnlich, wenn ein Textfeld wie "Strasse" mit NULL initialisiert wird, da Wert nicht vorhanden recht gut mit einem Leerstring widergegeben werden kann. Anders ist es bei numerischen oder Datumswerten da wird ein NULL hierfür benötigt.

Gruß
K-H
Hallo K-H,

ich bekommen eine DB mit mehreren tausend Adressen. Einige Felder davon sind nullable und sind auch leer. Ich würde die Strings übrigens auch auf null lassen und nicht mit einem leer String befüllen, einfach nur weil ich es als richtiger empfinde. Aber wie du schon gelesen hast, kritisiere ich NUR die Umsetzung mit dem Unterschied der Abfrage mit "=" für Werte und die Abfrage mit "is" für null. Das finde ich völlig unnötig und eine große Fehlerquelle.

Gruß Kostas
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.580 Beiträge
 
Delphi 6 Enterprise
 
#13

AW: Im Select null oder Wert in WHERE

  Alt 27. Jan 2020, 11:16
Es lassen sich bestimmt bessere Erklärungen für das "Warum" finden, aber das war auf die Schnelle:

https://stackoverflow.com/questions/...ead-of-is-null
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.742 Beiträge
 
Delphi 2010 Enterprise
 
#14

AW: Im Select null oder Wert in WHERE

  Alt 27. Jan 2020, 12:06
Ich denke über die IS NULL Prüfungen nicht mehr nach.
Vielleicht ist das auch bei den Leuten in den Standardisierungsgremien so. Vielleicht ist es aber auch einfach eine Riesenkatastrophe, wenn das mal abgeändert würde.

Immerhin, es gibt noch andere Stellen, die man vielleicht kennen sollte. Z.B. die Handhabung von Leerstrings in Oracle, dort wird NULL daraus gemacht. Delphi "kennt" das aber, auch interessant.

An dem Beispiel im Stackoverflow Link von Jumpy kann man eigentlich ganz schön sehen, welchen Hintergrund Nullwerte bspw. bei Outerjoins haben. Wenn durch einen Outerjoin leere Textspalten also NULL Werte "entstehen", kann man wirklich nicht sagen, dass es das gleiche ist, wie ein Leerstring.
Eine andere Perspektive wäre die Frage, wie werden eigentlich schon im Programm (im Memory) Variablen initialisiert (oder auch nicht) und welchen Wert haben nicht initialisierte Variablen?

Hier ist noch ein Artikel mit ein paar weiterführenden Links (nicht nur zu NULL):
http://www.itte.no/en/2018/10/01/dis...and-databases/
Gruß, Jo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf