Autor |
Beitrag |
pesi
      
Beiträge: 67
Erhaltene Danke: 1
|
Verfasst: Do 23.12.10 15:38
Hallo,
mir ist gerade mit Schrecken etwas aufgefallen und ich wollte mal fragen ob das generell so ist, oder ob ich etwas falsch mache!?!?
Ich habe ein " select * from TabelleX where FeldA not like 'Artikel%' "
Das Ergebnis sind zwar alle Datensätze die in FeldA z.B. "Fred", "Hildtrud" oder sonst was drinstehen haben, aber es werden NICHT die Datensätze ausgegeben bei denen FeldA leer ist (also Null). Ähem... wenn ein Wert ungleich "Artikel%" ist, dann doch wohl ein komplett leeres Feld! Ist das wirklich so (also ich hab´s ja getestet und es IST so)!? ....nur glauben kann und will ich das nicht?
Gibt´s einen Trick, muss ich etwas anders machen oder muss ich das o.g. Statement wirklich um ein "or FeldA is Null" erweitern???
Danke & Gruß
Peter
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 23.12.10 15:53
Nun ja, like kann nur bei Feldern geprüft werden, die nicht Null sind. Und darauf wird dann not angewendet. Deshalb wird das schon so korrekt sein.
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 23.12.10 16:18
Das ist SQL-Sandardverhalten.
unter MSSQL könnte man es so machen
Quelltext 1:
| select * from TabelleX where COALESECE(FeldA,'') not like 'Artikel%' |
unter Access
Quelltext 1:
| select * from TabelleX where IIF(FeldA is NULL,'',FeldA) not like 'Artikel%' |
bei MySQL muß ich passen, ich denke aber es muß entsprechendes geben.
Wobei ein "OR FeldA is null" IMHO auch nicht weh tut.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
pesi 
      
Beiträge: 67
Erhaltene Danke: 1
|
Verfasst: Do 23.12.10 16:27
@Jaenicke: Es ist nur so sinnlos und für mein Verständnis absolut unlogisch!
@Bummi: Ne, diese Erweiterung des Statements tut mir sicher nicht weh (wenn ich mich an anderen Stellen nicht bereits auf ein "korrektes" Verhalten verlassen hätte und das jetzt alles noch anpassen muss  ).
Wollte es einfach nur nochmal hier bestätigt haben, dass "not like" sich imho "unlogisch" verhält!
Danke Euch!
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 23.12.10 16:34
Eigentlich muß man es nur wissen...
NULL kann nicht mit Vergleichsoperatoren geprüft werden, sondern mit IS NULL bzw. IS NOT NULL
Jeder Verkettung oder Rechenoperation mit NULL ergibt immer NULL, außer bei Aggregatfuntionen (SUM,AVG,..)
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 23.12.10 16:38
Moin!
pesi hat folgendes geschrieben : | Wollte es einfach nur nochmal hier bestätigt haben, dass "not like" sich imho "unlogisch" verhält! |
Nun ja, vielleicht ist dein Verständis des "Wertes" NULL ja auch updatebedürftig.  NULL repräsentiert einen abwesenden Wert, also einen nicht-Wert. Folglich kann ein nicht vorhandener Wert auch nie LIKE irgendwas sein. Das NOT bezieht sich aber auf das LIKE, also: alles korrekt.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Do 23.12.10 18:29
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|