Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wenn Feld null oder 0 einen anderen Wert zurückgeben (https://www.delphipraxis.net/182694-wenn-feld-null-oder-0-einen-anderen-wert-zurueckgeben.html)

DelTurbo 11. Nov 2014 12:16

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:
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;
Ich müsste wenn x.FIDPtr 0 ist, eine 53 haben. Bekomme es aber einfach nicht hin.

Gruß und danke im voraus

mkinzler 11. Nov 2014 12:26

AW: If then else
 
Beim Inner Join gibt es die Datensätze mit NULL nicht mehr

p80286 11. Nov 2014 12:30

AW: If then else
 
NULL und 0 ist nicht das gleiche!
Kennt MySql
SQL-Code:
decode
?
dann mach es so
Code:
select decode(x.FIDPtr,null,' ',0,'53',x.FIDPtr)
und der Join sollte doch wohl über die ID gehen?

Gruß
K-H

DelTurbo 11. Nov 2014 12:33

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)

DelTurbo 11. Nov 2014 12:43

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:
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;
Weder mit SELECT noch ohne.

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))

Medium 11. Nov 2014 13:07

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 :)

baumina 11. Nov 2014 13:14

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;

DelTurbo 11. Nov 2014 13:15

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ß

DelTurbo 11. Nov 2014 13:21

AW: Wenn Feld null oder 0 einen anderen Wert zurückgeben
 
Zitat:

Zitat von baumina (Beitrag 1279372)
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;

Uff, das klappt. Vielen vielen Dank!!!

baumina 11. Nov 2014 13:28

AW: Wenn Feld null oder 0 einen anderen Wert zurückgeben
 
Vielleicht so, wobei mir deine Datenstruktur sehr seltsam vorkommt:

SQL-Code:
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;
EDIT: Aber wenn das andere geklappt hat, dann war deine "was brauche ich" Beschreibung sehr seltsam *lach


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:47 Uhr.
Seite 1 von 2  1 2      

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