Leeres Ergebnis
am 25.01.2006 16:28:33 von Andreas Bensen
Hi!
kann ich irgendwie mittels IFNULL auf ein leeres Ergebnis reagieren und
trotzdem eine Zeile ausgeben?
Gebe ich nur den Spaltennamen an IFNULL(spalte, 123), passiert nichts,
verwende ich eine Funktion IFNULL(max(spalte), 123), dann geht es, aber
ich verändere damit die EXPR1 von IFNULL.
Danke!
Andreas
Re: Leeres Ergebnis
am 25.01.2006 16:41:51 von Dominik Echterbruch
Andreas Bensen wrote:
> Hi!
>
> kann ich irgendwie mittels IFNULL auf ein leeres Ergebnis reagieren und
> trotzdem eine Zeile ausgeben?
Wozu soll das gut sein? Wenn es kein Ergebnis gibt, gibt es kein
Ergebnis. Was soll da dann NULL oder nicht NULL sein?
> Gebe ich nur den Spaltennamen an IFNULL(spalte, 123), passiert nichts,
> verwende ich eine Funktion IFNULL(max(spalte), 123), dann geht es, aber
> ich verändere damit die EXPR1 von IFNULL.
Wie gesagt: Was willst du damit bezwecken: Wenn es kein Ergebnis gibt,
ist es doch völlig unerheblich, ob irgendein Wert NULL wird.
Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786
Re: Leeres Ergebnis
am 25.01.2006 16:46:28 von Dominik Echterbruch
Andreas Bensen wrote:
> Hi!
>
> kann ich irgendwie mittels IFNULL auf ein leeres Ergebnis reagieren und
> trotzdem eine Zeile ausgeben?
Wozu soll das gut sein? Wenn es kein Ergebnis gibt, gibt es kein
Ergebnis. Was soll da dann NULL oder nicht NULL sein?
> Gebe ich nur den Spaltennamen an IFNULL(spalte, 123), passiert nichts,
> verwende ich eine Funktion IFNULL(max(spalte), 123), dann geht es, aber
> ich verändere damit die EXPR1 von IFNULL.
Wie gesagt: Was willst du damit bezwecken: Wenn es kein Ergebnis gibt,
ist es doch völlig unerheblich, ob irgendein Wert NULL würde, wenn es
Ergebniszeilen gäbe.
Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786
Re: Leeres Ergebnis
am 25.01.2006 16:50:58 von Andreas Bensen
Dominik Echterbruch wrote:
> Andreas Bensen wrote:
>> Hi!
>>
>> kann ich irgendwie mittels IFNULL auf ein leeres Ergebnis reagieren
>> und trotzdem eine Zeile ausgeben?
>
> Wozu soll das gut sein? Wenn es kein Ergebnis gibt, gibt es kein
> Ergebnis. Was soll da dann NULL oder nicht NULL sein?
>
>> Gebe ich nur den Spaltennamen an IFNULL(spalte, 123), passiert
>> nichts, verwende ich eine Funktion IFNULL(max(spalte), 123), dann
>> geht es, aber ich verändere damit die EXPR1 von IFNULL.
>
> Wie gesagt: Was willst du damit bezwecken: Wenn es kein Ergebnis gibt,
> ist es doch völlig unerheblich, ob irgendein Wert NULL wird.
Ich will bei einem "INSERT INTO SELECT" Befehl einen Default-Wert
einfügen, falls das SELECT keinen Datensatz liefert. Wie gesagt, die
Logik hinter der max-Funktion erkennt, daß "spalte" nicht existiert und
macht daraus NULL. Sowas versuche ich zu simulieren, ohne EXPR1 von
IFNULL zu verändern.
Re: Leeres Ergebnis
am 25.01.2006 17:45:08 von Dominik Echterbruch
Andreas Bensen wrote:
>>>
>>> kann ich irgendwie mittels IFNULL auf ein leeres Ergebnis reagieren
>>> und trotzdem eine Zeile ausgeben?
>>
>>> Gebe ich nur den Spaltennamen an IFNULL(spalte, 123), passiert
>>> nichts, verwende ich eine Funktion IFNULL(max(spalte), 123), dann
>>> geht es, aber ich verändere damit die EXPR1 von IFNULL.
>>
>> Wie gesagt: Was willst du damit bezwecken: Wenn es kein Ergebnis gibt,
>> ist es doch völlig unerheblich, ob irgendein Wert NULL wird.
>
> Ich will bei einem "INSERT INTO SELECT" Befehl einen Default-Wert
> einfügen, falls das SELECT keinen Datensatz liefert. Wie gesagt, die
> Logik hinter der max-Funktion erkennt, daß "spalte" nicht existiert und
> macht daraus NULL. Sowas versuche ich zu simulieren, ohne EXPR1 von
> IFNULL zu verändern.
Gut, MAX() ist eine Funktion, die immer exakt einen Wert zurück gibt.
Wenn es keine Zeilen gibt, ist der Rückgabewert nicht definiert (aka
NULL). In diesem Zusammenhang *hast* du aber eine Ergebniszeile (nämlich
den Rückgabewert der Funktion).
Das Ergebnis von MAX() ist also unabhängig von der Anzahl Zeilen, die
das SELECT normalerweise zurückgeben würde. Würde MAX() im Falle von 0
gefundenen Zeilen ebenfalls keinen Wert zurückgeben, würde dir auch
damit die IFNULL() Funktion nicht helfen.
Fazit: Keine Zeilen, kein NULL, kein IFNULL().
Was du machen kannst: Schreib eine User Defined Function oder eine
Stored Procedure, die das tut, was du möchtest (nämlich entweder das
Ergebnis zurückgeben, oder einen Default-Wert).
Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786
Re: Leeres Ergebnis
am 25.01.2006 17:54:46 von Axel Schwenke
"Andreas Bensen" wrote:
> Ich will bei einem "INSERT INTO SELECT" Befehl einen Default-Wert
> einfügen, falls das SELECT keinen Datensatz liefert.
s/keinen Datensatz/NULL/
Du suchst wohl COALESCE()
Falls du tatsächlich ein INSERT ... SELECT machen willst, wo das
SELECT auch mal keinen Datensatz liefern kann und in diesem Fall
einen Default-Datensatz einfügen willst, ist es geschickter
affected_rows() auszuwerten und das INSERT VALUES ()
von Hand abzusetzen.
XL