Feldinhalt in bigint Feld loeschen

Feldinhalt in bigint Feld loeschen

am 06.09.2006 12:30:09 von Peter Honka

Hallo,

musste in einer Tabelle "preistabelle" den Tatentyp
im Feld "preis" von vachar auf bigint ändern. Nun sind einige
Datensätze, die mal einen Preis enthielten aber
bei denen der Preis danach wieder gelöscht
wurde, auf "0" im Feld "preis" gesetzt worden.

Nun wollte ich bei allen Datensätze, deren Preis
0 lautet, den (falschen) Preis wieder löschen.

Leider funktioniert folgendes Statment nicht:

UPDATE preistabelle SET preis='' WHERE preis=0

Der where - Teil scheint ja richtig, aber wie
schreibe ich die Bedingung "lösche feldinhalt preis"
syntaktisch korrekt?

Myisam Tabelle, Feld Preis Datentyp jetzt bigint.


Danke und Gruss
Peter

Re: Feldinhalt in bigint Feld loeschen

am 06.09.2006 12:50:42 von Helmut Chang

Peter Honka schrieb:

> musste in einer Tabelle "preistabelle" den Tatentyp
> im Feld "preis" von vachar auf bigint ändern.
....
> Leider funktioniert folgendes Statment nicht:
>
> UPDATE preistabelle SET preis='' WHERE preis=0
>
> Der where - Teil scheint ja richtig, aber wie
> schreibe ich die Bedingung "lösche feldinhalt preis"
> syntaktisch korrekt?

Tjo. Einen Leerstring in ein BIGINT-Feld zu schreiben funktioniert
natürlich nicht. Und entspricht auch nicht dem gewünschten.



gruss, heli

Re: Feldinhalt in bigint Feld loeschen

am 06.09.2006 13:07:47 von Claus Reibenstein

Peter Honka schrieb:

> musste in einer Tabelle "preistabelle" den Tatentyp
> im Feld "preis" von vachar auf bigint ändern. Nun sind einige
> Datensätze, die mal einen Preis enthielten aber
> bei denen der Preis danach wieder gelöscht
> wurde, auf "0" im Feld "preis" gesetzt worden.

Dann wurde der Preis nicht wirklich gelöscht, also auf NULL gesetzt.

> Leider funktioniert folgendes Statment nicht:
>
> UPDATE preistabelle SET preis='' WHERE preis=0

Kann auch nicht funktionieren, weil Du einem BIGINT keinen String
zuweisen kannst.

Ist das der Weg, wie die Preise früher "gelöscht" wurden? Dann ist klar,
warum sie jetzt 0 sind.

> Der where - Teil scheint ja richtig, aber wie
> schreibe ich die Bedingung "lösche feldinhalt preis"
> syntaktisch korrekt?

Wie bei allen anderen Datentypen auch:

SET `preis` = NULL

Setzt aber voraus, dass `preis` auch NULL werden kann, also nicht auf
NOT NULL gesetzt ist.

BTW: Was stört Dich an dem Wert 0? Warum willst Du das von NULL
unterscheiden?

Gruß. Claus

Re: Feldinhalt in bigint Feld loeschen

am 06.09.2006 13:12:26 von Peter Honka

Helmut Chang schrieb:
> Tjo. Einen Leerstring in ein BIGINT-Feld zu schreiben funktioniert
> natürlich nicht. Und entspricht auch nicht dem gewünschten.
>


Dann also so: UPDATE idstatistik SET preis=NULL WHERE preis=0

Danke Helmut,

Gruss
Peter

Re: Feldinhalt in bigint Feld loeschen

am 06.09.2006 13:13:42 von Peter Honka

Claus Reibenstein schrieb:
>> UPDATE preistabelle SET preis='' WHERE preis=0
> Kann auch nicht funktionieren, weil Du einem BIGINT keinen String
> zuweisen kannst.

jau!

> SET `preis` = NULL

ok: UPDATE idstatistik SET preis=NULL WHERE preis=0

> Setzt aber voraus, dass `preis` auch NULL werden kann, also nicht auf
> NOT NULL gesetzt ist.

ja, geht

Danke und Gruss
Peter

Re: Feldinhalt in bigint Feld loeschen

am 06.09.2006 16:12:50 von Helmut Chang

Claus Reibenstein schrieb:

> BTW: Was stört Dich an dem Wert 0? Warum willst Du das von NULL
> unterscheiden?

Ohne jetzt genau zu wissen, was die Preistabelle des OPs enthält:

"Kost nix, is gratis!" ist ganz was anderes als "k. A., was das kostet"
bzw. "Preis auf Anfrage".

gruss, heli

Re: Feldinhalt in bigint Feld loeschen

am 06.09.2006 18:14:15 von Harald Fuchs

In article <4m7og2F4uegpU1@individual.net>,
Claus Reibenstein writes:

>> UPDATE preistabelle SET preis=3D'' WHERE preis=3D0

> Kann auch nicht funktionieren, weil Du einem BIGINT keinen String
> zuweisen kannst.

> Ist das der Weg, wie die Preise früher "gelöscht" wurden? Dann ist kl=
ar,
> warum sie jetzt 0 sind.


"Klar" ist das nur für jemanden, der MySQL ganz toll findet.
Ernstzunehmende Datenbanken bringen bei sowas eine Fehlermeldung.


Setz "sql_mode=3DTRADITIONAL" in Deine my.cnf, dann ist auch MySQL
einigermaßen ernstzunehmen.

Re: Feldinhalt in bigint Feld loeschen

am 06.09.2006 19:02:58 von Claus Reibenstein

Harald Fuchs schrieb:

> In article <4m7og2F4uegpU1@individual.net>,
> Claus Reibenstein writes:

Immer diese Einleitungsromane ...

>>> UPDATE preistabelle SET preis='' WHERE preis=0
>>
>> Ist das der Weg, wie die Preise früher "gelöscht" wurden? Dann ist klar,
>> warum sie jetzt 0 sind.
>
>
> "Klar" ist das nur für jemanden, der MySQL ganz toll findet.
> Ernstzunehmende Datenbanken bringen bei sowas eine Fehlermeldung.
>


Scheint hier nicht sehr beliebt zu sein, dieser Andreas.

> Setz "sql_mode=TRADITIONAL" in Deine my.cnf, dann ist auch MySQL
> einigermaßen ernstzunehmen.

Ich nehme MySQL auch ohne diese Option ernst. Ich habe mich auf seine
Eigenheiten eingestellt und kann damit sehr gut leben.

Gruß. Claus