![]() |
Datenbank: MySql • Version: 5.x • Zugriff über: UniDac
Wenn Feld null oder 0 einen anderen Wert zurückgeben
Hallo,
irgendwie bekomme ich es nicht hin, die IF-Abfrage richtig zu machen. Bei x.FIDPtr können 3 Werte kommen. Entweder null,0 oder halt eine Zahl welcher der Pointer ist. Ist x.FIDPtr null bekomme ich nur leere Felder zurück. Deswegen habe ich nun in der Tabelle ein Leerfeld angelegt. Mit null klappt es auch. Aber nicht mit 0. Die abfrage sieht so aus:
Code:
Ich müsste wenn x.FIDPtr 0 ist, eine 53 haben. Bekomme es aber einfach nicht hin.
SELECT X.ID,X.Vorname,X.Nachname,Y.Funktion FROM ADaten as x
INNER JOIN FDaten as y on (y.ID=IFNULL(x.FIDPtr,53)) WHERE X.ID=3964; Gruß und danke im voraus |
AW: If then else
Beim Inner Join gibt es die Datensätze mit NULL nicht mehr
|
AW: If then else
NULL und 0 ist nicht das gleiche!
Kennt MySql
SQL-Code:
?
decode
dann mach es so
Code:
und der Join sollte doch wohl über die ID gehen?
select decode(x.FIDPtr,null,' ',0,'53',x.FIDPtr)
Gruß K-H |
AW: If then else
Das habe ich schon gemerkt. Aber wie bekomme ich die 53 zurück?
Mit dieser Abfrage klappt es auch nicht. Ich habe das schon sehr viel versucht. Aber komme an dieser stelle nicht weiter.
Code:
INNER JOIN FDaten as y on (y.ID=IFNULL(x.FIDPtr,53)) OR IF(x.FIDPtr=0,53,xFIDPtr)
|
AW: If then else
Erstmal sorry, habe wohl getippt und deine Antwort nicht direkt gesehen.
Decode ist bei MySql wohl was anderes. Die abfrage klappt leider nicht.
Code:
Weder mit SELECT noch ohne.
SELECT X.ID,X.Vorname,X.Nachname,Y.Funktion FROM ADaten as x
INNER JOIN FDaten as y on (y.ID=select decode(x.FIDPtr,null,' ',0,'53',x.FIDPtr)) WHERE X.ID=3964; Fehler: [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null,' ',0,'53',FDaten.FIDPtr)) |
AW: If then else
Ich sehe hier nirgends eine if-then-else Abfrage, nur SQL Statements. Wie genau sehen deine Ausgangsdaten aus, und was willst du am Ende wirklich haben?
Zwei "Glaskugel"-Ideen-Ansätze: Wenn du auch null-Felder im Join brauchst, nimm FULL OUTER JOIN. Wenn das Problem nicht im SQL sondern eher in Delphi liegt (was der Threadtitel irgendwie suggeriert): Praktisch alle DB-Komponenten nutzen Delphis TField, welches wiederum eine Property "IsNull" bietet. Damit lassen sich auch in Delphi 0 und NULL unterscheiden. Um aber wirklich konkret zu werden, ist mir das hier alles zu konfus. Sortier dich erstmal selbst :) |
AW: Wenn Feld null oder 0 einen anderen Wert zurückgeben
Ich hätte noch ne Orakel-Lösung :-D
SQL-Code:
SELECT X.ID,X.Vorname,X.Nachname,Y.Funktion FROM ADaten as x
INNER JOIN FDaten as y on (y.ID=x.FIDPtr) WHERE X.ID=3964; |
AW: Wenn Feld null oder 0 einen anderen Wert zurückgeben
Topic ist geändert. Besser kann ich das nicht beschreiben.
Also, ich habe 2 Tabellen. Einmal mit Namen und einen Pointer auf die ID der zweiten Tabelle. Wenn der Pointer richtig gesetzt ist, klappt alles. Wenn nix drin steht, also der Pointer null ist, dann gebe ich mir eine 53 zurück. Leider kann diese "Pointerfeld" auch den 0 haben. Dann brauch ich auch die 53. Und das bekomme ich nicht hin. Das null nicht gleich 0 ist weiß ich. Sonst würde es ja klappen. ;) Ich hoffe das war verständlich. Wenn nicht, einfach nochmal fragen. Gruß |
AW: Wenn Feld null oder 0 einen anderen Wert zurückgeben
Zitat:
|
AW: Wenn Feld null oder 0 einen anderen Wert zurückgeben
Vielleicht so, wobei mir deine Datenstruktur sehr seltsam vorkommt:
SQL-Code:
EDIT: Aber wenn das andere geklappt hat, dann war deine "was brauche ich" Beschreibung sehr seltsam *lach
SELECT X.ID,X.Vorname,X.Nachname,Y.Funktion FROM ADaten as x
LEFT JOIN FDaten as y on (y.ID=If(coalesce(x.FIDPtr,53)=0,53,coalesce(x.FIDPtr,53))) WHERE X.ID=3964; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:47 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