![]() |
Datenbank: SQLITE • Version: xxx • Zugriff über: egal
SQLITE ifnull komisches verhalten
Liste der Anhänge anzeigen (Anzahl: 3)
Moin, ich habe hier ein äußerst komisches verhalten bei einer SQL Abfrage auf SQLITE:
Die Tabelle auf die die Abfrage läuft: http://www.delphipraxis.net/attachme...1&d=1489573610 jetzt setze ich folgendes SQL auf die Tablle ab:
Code:
Ergebnis:
Select I.Keyname, I.Value, I.Abhaengig, T.Value from INITAB I
LEFT JOIN (Select Sectionname, Keyname, Value from INITAB) T on T.Keyname = I.Abhaengig where T.Value = 1 http://www.delphipraxis.net/attachme...1&d=1489573870 Soweit so gut. jetzt möchte ich aber alle Zeilen als ergebnis haben, in welchen die spalte
Delphi-Quellcode:
entweder '1' oder NULL ist. Logische schlussfolgerung: ein
T.Value
Delphi-Quellcode:
verwenden!
ifnull
Also ein
Delphi-Quellcode:
drum gesetzt:
ifnull
Code:
Ergebnis:
Select I.Keyname, I.Value, I.Abhaengig, T.Value from INITAB I
LEFT JOIN (Select Sectionname, Keyname, Value from INITAB) T on T.Keyname = I.Abhaengig where ifnull(T.Value, 1) = 1 http://www.delphipraxis.net/attachme...1&d=1489574293 Jetzt meine Frage: wo ist die Zeile "MailMonate" hin? habe ich ifnull irgendwie falsch verstanden? In meinem Wissensstand macht ifnull bei einer Spalte aus allen Feldern, in welchen NULL steht den angegebenen Wert und ansonsten gibt es den vorhandenen Wert zurück. dementsprechend müsste hier doch auch die "MailMonate" Zeile mit kommen oder? |
AW: SQLITE ifnull komisches verhalten
kann sein dass das ein Typproblem ist. mach mal auf die andere Seite auch ifnull(1,1) zum Test
|
AW: SQLITE ifnull komisches verhalten
Naja, da der Wert von Value = 6 ist und Du auf Value = 1 abfragst, dürfte das Ergebnis schon stimmen.
Aufgrund Deiner Frage und der Darstellungen in den Bildern hätte ich dieses SQL erwartet:
SQL-Code:
Select I.Keyname, I.Value, I.Abhaengig, T.Value from INITAB I
LEFT JOIN (Select Sectionname, Keyname, Value from INITAB) T on T.Keyname = I.Abhaengig where ifnull(T.Value1, 1) = 1 |
AW: SQLITE ifnull komisches verhalten
Nein, eigentlich nicht. Auch die Doku dazu
![]() Eigentlich sollten beide Abfragen das gleiche Ergebnis bringen, da die Spalte Value nie NULL ist, von daher wär das mit ifnull eh überflüssig. |
AW: SQLITE ifnull komisches verhalten
Versuche es mal mit
SQL-Code:
...where coalesce( TValue1,1) = 1;
|
AW: SQLITE ifnull komisches verhalten
Ich würds mal so probieren:
Code:
Select I.Keyname, I.Value, I.Abhaengig, T.Value from INITAB I
LEFT JOIN (Select Sectionname, Keyname, Value from INITAB) T on T.Keyname = I.Abhaengig where (T.Value = 1) OR ISNULL(T.Value); |
AW: SQLITE ifnull komisches verhalten
Zitat:
Der gesuchte Tabelleneintrag enthält in der Spalte Value den Wert 6. Wenn ich da auf 1 Abfrage, werde ich ihn nicht in der Ergebnismenge erhalten, auch dann nicht, wenn ich ihn vorher auf Null prüfe und für den Fall, dass er Null sein sollte durch 1 ersetze. 6 ist nicht Null und wird daher durch ein IfNull(6,1) auch nicht zu 1. |
AW: SQLITE ifnull komisches verhalten
Ich habe jetzt noch nicht verstanden wie ihr auf
Delphi-Quellcode:
kommt? ich möchte auf den Value Wert aus der Unterabfrage aus dem
T.Value1
Delphi-Quellcode:
abfragen, und die Spalte heisst doch
LEFT JOIN
Delphi-Quellcode:
Value
Zitat:
Delphi-Quellcode:
6 und ich frage
I.Value
Delphi-Quellcode:
ab, welcher in diesem Fall 1 ist und dementsprechend mit selektiert werden müsste.
T.Value
Zitat:
SQL-Code:
nicht gibt sondern nur die Spalte
TValue1
SQL-Code:
.
T.Value
Zitat:
|
AW: SQLITE ifnull komisches verhalten
Ich habe es jetzt gelöst indem ich als Abfrage nicht
SQL-Code:
verwende sondern
... where ifnull(T.Value, 1) = 1
SQL-Code:
. Dies liefert das gewünschte Ergebnis. Aber sollten nicht beide Abfragen das korrekte Ergebnis Liefern?
...where (T.Value = 1 or T.Value is NULL)
|
AW: SQLITE ifnull komisches verhalten
In der Ergebnismege (JOIN) ist das Feld Value 2 Mal enthalten. Über diese Tatsache stolpert Deine Abfrage.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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