![]() |
Datenbank: MySQL • Version: 5.6 • Zugriff über: HeidiSQL
Wie mit Feldern vergleichen, die (NULL) sind
Hallo,
wie nenne ich den Zustand NULL in einem Vergleich die NULL, also leer sind? Also z. B. Name<>'' oder Name<>NULL? Danke im Voraus Manfred |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Delphi-Quellcode:
If <Field>.isNull then ...
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
SQL-Code:
[edit] *g* Du hättest dazusagen sollen, ob Du Delphi oder SQL meinst. [/edit]
WHERE Name IS NOT NULL
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
habe die Vorschläge von mkinzler und DeddyH probiert... Fehlermeldung.
Es geht um eine SQL-Abfrage... in HeidiSQL, mein Werkzeug für mySQL. |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Da die Fehlermeldung ja anscheinend irgendwelchen Geheimhaltungsvorschriften unterliegt, ist eine weitere Hilfe abhängig von der Bereitstellung einer funktionierenden Kristallkugel.
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
Zitat:
Delphi-Quellcode:
sieht auf den ersten Blick recht gut aus.
WHERE (Name <> '') OR (Name IS NOT NULL)
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
es geht um eine Abfrage wie
update tabelle set X=Y where x<>NULL Leider interessiert es nicht, was ich als NULL eintrage. Es wird nichts aktualisiert. /* Affected rows: 0 Gefundene Zeilen: 0 Warnungen: 0 Dauer von 0 of 1 query: 0,000 sec. */ Es gibt aber entsprechende Zeilen. |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Vielleicht geht es so:
Code:
update tabelle
set X=Y where coalesce(x, '') <> '' |
AW: Wie mit Feldern vergleichen, die (NULL) sind
ich kenne 'coalesce' gar nicht. Wenn es die einzige Klausel ist funktioniert es.
Wenn es aber mehrere gibt, findet er wieder nichts, also z. B. update tabelle set X=Y where (coalesce(x, '') <> '') and (coalesce(z, '') <> '') z ist eine weiter Spalte, die auch NULL sein kann. |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Zitat:
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
ja, es gibt mehrere Spalten die NULL sein können.
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
Ja, es gibt mehrere Spalten die NULL sind.
sorry, Doppelpost |
AW: Wie mit Feldern vergleichen, die (NULL) sind
SQL-Code:
sollte eigentlich eine Fehlermeldung produzieren
Feld<>Null
Wenn Du ein Feld auf Null oder einen Inhalt prüfen willst dann so:
SQL-Code:
Gruß
..
and (Feld=irgendwas or Feld is null) ... K-H |
AW: Wie mit Feldern vergleichen, die (NULL) sind
feld<>NULL ist ein valider Ausdruck und sollte keine Fehlermeldung ausgeben. :gruebel: <-- edit.
Nichts ist == NULL. Ebenso ist nichts <> NULL. NULL ist nicht vergleichbar. Daher gibt es IS NULL und IS NOT NULL.
Code:
Im Beispiel von p80286 sieht man, wie komplex die Arbeit mit NULL Werten werden kann. Daher sollte man davon Abstand nehmen, bzw. dreimal überlegen, ob NULL als abzufragendes Datum wirklich notwendig ist.
Update table set x=y where x is null
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
Zitat:
Zitat:
Also ich muß da nur einmal überlegen, ob ich z.B. eine Selection "where Feld is Null" anfordere oder nicht. Oder besser, ich muß eigentlich gar nicht überlegen, denn da gibt's nicht wirklich was zu überlegen, wenn man die Records einer Tabelle, deren Feld X Null ist, benötigt, z.B.:
Code:
Oder in Delphi:
select * from PERSONEN where PERS_ADRES is null
Delphi-Quellcode:
Was also sollte man da groß überlegen? Und was soll am Beispiel von p80286 komplex sein?
Qset_Personen.Filter := 'PERS_ADRES is null';
|
AW: Wie mit Feldern vergleichen, die (NULL) sind
er testet auf ungleich null
update Tabelle set X=Y where x<>NULL richtig wäre also IS NOT NULL update Tabelle set X=Y where x is not null |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Ja und? Wenn du nochmal hinschaust, dann erkennst du vielleicht, daß das nichts mit dem Inhalt meines Postings zu tun hat.
Der Titel des Themas lautet übrigens: Mit Feldern verleichen, die NULL sind. Dazu wird hier gegensätzliches behauptet, so z.B.: "feld<>NULL ist ein valider Ausdruck und sollte keine Fehlermeldung ausgeben" im Gegensatz zu "
SQL-Code:
sollte eigentlich eine Fehlermeldung produzieren". Das kann man so pauschal nun aber nicht behaupten, weil nicht ganz klar ist, ob nun Delphi oder SQL gemeint ist, denn via SQL funktioniert zwar ein "feld<>NULL", in Delphi dagegen nicht.
Feld<>Null
Das war aber, wie gesagt, weder Thema noch Inhalt meines Postings, sondern diverse Behauptung meines Vorposters, die ich nicht mit meinen Vorstellungen vereinbaren konnte, was ich mit dem Hinweis, daß ich das nicht verstehe, zum Ausdruck gebracht habe. Sonst alles klar? Gut geschlafen? Schmeckt der Kaffee? :-D |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Zitat:
Code:
Natürlich könnte man COALESCE oder ISNULL nehmen, aber da geht dann der Vorteil eines Index schnell flöten.
select * from Tabelle
Where (Name is null or Name = :Name) or (Foobar is Null or Foobar = :Foobar) ... Bei einer Abfrage auf 'Daten vorhanden/nicht vorhanden' ist das natürlich vollkommen ok, aber wenn die Spalte in Reportfiltern vorkommt, ist das dann wieder blöd, wg. (siehe oben). Zitat:
Etwas OT: Stell dir vor, Deine Tabelle enthält eine Spalte 'A varchar(10) NULL'. Du schreibst nun einen Report und möchtest das Ergebnis filtern, so etwa:
Delphi-Quellcode:
Nun kann die Spalte A NULL-Werte enthalte, weil, ist ja nicht komplex. Nun willst Du auch darauf abfragen können. Wie machst Du das jetzt? Dein Parameter 'A' kann ja schlecht 'NULL' enthalten, also?
select * from Tabelle where A=:A
Code:
Stimmt das überhaupt so? (Query Optimizer lieben deartige Konstrukte übrigens). Wie Du siehst, ist das spätestens jetzt komplex, vor allen Dingen dann, wenn sich das über alle Spalten hinzieht. Also lieber: Finger weg (oder keine Reports mit NULL-Filtermöglichkeit).
select * from Tabelle
where (:A is not null and A=:A) or (:A is null and A is null) Wenn man einen Report benötigt, der auch alle z.B. unausgefüllten TelefonNr-Spalten zeigt, dann lieber explizit als separaten Report oder man deklariert die Telefon-Spalte als NOT NULL und dann hat der leere String die Bedeutung: 'unausgefüllt'. Aber klar: Manchmal geht es nicht anders und dann ist man auch wieder froh über NULL (LEFT JOIN z.B.) PS: Das mit dem Kaffee war ein gutes Stichwort. |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Zitat:
Ich hab z.B. eine Tabelle, da kriegt der Kunde regelmäßig neue Adressen rein, die sind unvollständig, mal fehlt die Straße, mal die Telefonnummer, mal die Postleitzahl usw. Um das zu ergänzen, kann er sich alle Kunden-Records anzeigen lassen, bei denen die Telefon-Nr. Null ist. Wo soll da ein Problem sein? Die Alternativen wären entweder im Grid alle Kunden-Datensätze durchzublättern, um optisch zu überprüfen, ob da irgendwo was fehlt – nicht sehr komfortabel. Oder die Datensätze zu sortieren und nach ganz oben oder ganz unten zu springen, um die Null-Einträge zu sehen – ein wenig komfortabler, aber nicht optimal. Zitat:
Zitat:
Zitat:
Zitat:
Hat wenigstens der Kaffee geschmeckt? |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Danke für Eure Hilfe!
is NULL ist die Lösung. |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Zitat:
![]() |
AW: Wie mit Feldern vergleichen, die (NULL) sind
Joar,
SQL-Code:
,
x IS NULL
SQL-Code:
oder
x IS NOT NULL
SQL-Code:
schon vor langer Zeit genannt wurden,
NOT (x IS NULL)
in manchen DBMS auch die Abkürzungen
SQL-Code:
oder
x ISNULL
SQL-Code:
x NOTNULL
und im Delphi-Code
Delphi-Quellcode:
oder
x.IsNull
Delphi-Quellcode:
.
not x.IsNull
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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 by Thomas Breitkreuz