Zwei Spalten beim SELECT "zusammenführen"

Zwei Spalten beim SELECT "zusammenführen"

am 09.08.2006 21:33:12 von Dirk Einecke

Hi,

ich habe eine Tabelle wo es u.a. zwei Spalten gibt - eine mit einer
privaten und eine mit einer dienstliche E-Mail-Adresse. Ich möchte nun
in meinem SQL-Statement folgendes realisieren:

Wenn eine dienstliche E-Mail-Adresse angegeben ist, dann nimm diese.
Wenn keine dienstliche E-Mail-Adresse angegeben ist, dann nimm die
private E-Mail-Adresse.

Kann man so etwas machen?
Wenn ja - wie?

Herzlichst
Dirk Einecke

Re: Zwei Spalten beim SELECT "zusammenführen"

am 09.08.2006 21:46:53 von Andreas

"Dirk Einecke" schrieb im Newsbeitrag
news:1155151992.900165.59110@b28g2000cwb.googlegroups.com...
Hi,

ich habe eine Tabelle wo es u.a. zwei Spalten gibt - eine mit einer
privaten und eine mit einer dienstliche E-Mail-Adresse. Ich möchte nun
in meinem SQL-Statement folgendes realisieren:

Wenn eine dienstliche E-Mail-Adresse angegeben ist, dann nimm diese.
Wenn keine dienstliche E-Mail-Adresse angegeben ist, dann nimm die
private E-Mail-Adresse.

Kann man so etwas machen?
Wenn ja - wie?

SELECT IF (email_work = NULL, email_private, email_work ) AS email

http://dev.mysql.com/doc/refman/5.1/de/control-flow-function s.html

Re: Zwei Spalten beim SELECT "zusammenführen"

am 09.08.2006 22:15:38 von Dirk Einecke

Hi,

Andreas wrote:
> SELECT IF (email_work = NULL, email_private, email_work ) AS email
>
> http://dev.mysql.com/doc/refman/5.1/de/control-flow-function s.html

Vielen Dank.
Genau das habe ich gesucht.

Herzlichst
Dirk Einecke

Re: Zwei Spalten beim SELECT "zusammenführen"

am 09.08.2006 22:56:34 von Thomas Rachel

Hallo Andreas,

bitte lasse beim Zitieren die ">" davor, denn ansonsten ist Dein Text und
der Deines Vorredners nicht auseinanderzuhalten.


Andreas wrote:


> SELECT IF (email_work = NULL, email_private, email_work ) AS email

Nein. Ein Vergleich mit = ergibt NULL, wenn mindestens einer der
Operanden NULL ist.

Test auf NULL macht man mit "IS [NOT] NULL".

Hier also:

SELECT IF (email_work = NULL, email_private, email_work ) AS email

Könnte man (kürzer und IMHO schöner) so schreiben:

SELECT IFNULL(email_work,email_private) AS email

Diese beiden Lösungen sind kurz und prägnant, aber leider
MySQL-spezifisch. Wenn man Wert auf möglichst Standard-SQL-kompatibles
Programmieren legt, schreibt man:

SELECT CASE WHEN email_work IS NULL THEN email_private ELSE email_work AS
email

oder kürzer

SELECT COALESCE(email_work,email_private) AS email


HTH,

Thomas
--
87.166253% der Statistiken spielen eine Genauigkeit vor,
die durch die angewandte Methode nicht gerechtfertigt wird.