![]() |
MySQL SELECT mit IF ?
Hi,
habe ein prob bei einem MySQL Statement, ich möchte einen SELECT auf eine Tabelle machen wo Spalten leer oder null sein können, aber in meinem Fall eher leer also ''. Mein Bsp.: z.B. die Spalten: NAME FOO BAR MAIL und DATUM nun folgendes Statement "SELECT * FROM tabelle", ABER ich möchte das er wenn MAIL = '' ist dort 'No Mail' in die Spalte packt beim Result! Hab ich etwas in der MySQL Doku gelesen und was über IF gefunden. Kam ich also auf die Idee:
Code:
Das geht aber nicht! :cry:
SELECT * IF(mail='',mail,'No Mail') FROM images
Hoffe ihr kömmt mir helfen, Gruss Daniel |
Re: MySQL SELECT mit IF ?
SQL-Code:
select ifnull(mail, 'No Mail') from images
|
Re: MySQL SELECT mit IF ?
im Select Statement kannst du Case benutzen:
SELECT *, CASE WHEN mail='' THEN 'No Mail' ELSE mail END AS mail FROM images statt * alle Felder bis auf Mail aufzählen! oh... Stevie war schneller und mit einer anderen Idee :) |
Re: MySQL SELECT mit IF ?
Hallo,
der SQL-Standard sieht hierfür die Funktion COALESCE vor; diese gibt aus den übergebenen (beliebig vielen) Parametern den ersten zurück, der nicht NULL ist:
SQL-Code:
Bei einer eventuellen Umstellung auf einen andere DB hast du dann eine Baustelle weniger!
select COALESCE (mail, 'no mail')...
Noch'n Tipp: Lieber immer alle gewünschten Felder aufzählen statt select *, das kann bei Struktur-Änderungen recht unangenehm werden... Gruß Peter |
Re: MySQL SELECT mit IF ?
Hey danke euch zwei, geht wunderbar! :)
Hab es jetzt so, da konnte ich ja gleich noch die abfrage auf NULL mit einbaun =)
SQL-Code:
Aber muss ich wirklich alle Felder auflisten? Wie läßtig wird das erst wenn ich mehr habe als die paar? Ohwei...
SELECT idx, sortkey, filename, hashname, hash, owner,
CASE WHEN ( mail = '' ) OR ( mail = NULL ) THEN 'No Mail' ELSE mail END AS mail, description, deletekey, size, uploadtime, ip, listingkey, insertmode FROM images //Edit: Danke PRehders, das ist ja noch Einfacher :) |
Re: MySQL SELECT mit IF ?
Naja... irgendwie geht das mit dem COALESCE gar nicht die Felder werden trozdem als leer zurückgeliefert, kann es sein das das nur bei NULL Feldern anwendbar ist?
SQL-Code:
SELECT idx, sortkey, filename, hashname, hash, owner, COALESCE( mail, 'No Mail' ) , description, deletekey, size, uploadtime, ip, listingkey, insertmode FROM images
|
Re: MySQL SELECT mit IF ?
Zitat:
|
Re: MySQL SELECT mit IF ?
Hallo,
da hatte ich wohl nicht so ganz geschnallt... COALESCE bearbeitet NULL-Werte; wenn bei dir aber ein leerer String drinsteht, ist dies natürlich nicht NULL und er bringt den Feldwert raus. Eine solche Datenkonstellation sollte man aber tunlichst beim Befüllen der DB vermeiden, denn wenn das Feld leer ist, ist doch wohl eigentlich NULL gemeint... Aber dann musst Du es wohl doch mit den anderen Konstrukten probieren. Gruß Peter |
Re: MySQL SELECT mit IF ?
Zitat:
Zitat:
|
Re: MySQL SELECT mit IF ?
Das war auch eher an die anderen gerichtet, die - wie ich - auf der Null-Schiene waren. :oops:
Du könntest also über einen Standardwert das (Nicht-)Befüllen mit NULL verhindern und dann das Case-Konstrukt in der Abfrage benutzen. |
Re: MySQL SELECT mit IF ?
Zitat:
SQL-Code:
auf einmal etwas ganz anderes als vorher und das gibt Verdauungsbeschwerden :?
select * from ...
Manchmal wird auch von Tables auf Views umgestellt und da kann es sehr schnell mal zu einem Verdreher in der Feldreihenfolge kommen; wenn die verdrehten Felder dann den gleichen Typ haben, wird es wirklich lustig bei der Fehlersuche (sonst gibt es meist einfach einen Abbruch). Es ist besser, genau das hinzuschreiben, was man haben will, dann hat man eine mögliche Fehlerquelle weniger. Bei einem kleinen Testprojekt o.ä. kannst du es natürlich anders handhaben, aber sobald es größer und komplexer wird, solltest du dir diese (einmalige) Arbeit machen. Wir doktern hier in einem halben Dutzend DB2-Instanzen mit ein paar hundert(!) Datenbanken, tausenden Tables und einem vielfachen an Views rum, für die ca. 15 Fachbereiche zuständig sind und Änderungen anfordern; da lernt man ganz schnell, dass Mehrarbeit manchmal Arbeit spart... Viel Spaß noch Peter |
Re: MySQL SELECT mit IF ?
nicht mail = NULL sondern mail is NULL bzw. mail is not NULL
|
Re: MySQL SELECT mit IF ?
Zitat:
Nx für ungut.. Gruß Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 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