3 messages in com.mysql.lists.mysql-deRe: Bestimmten Wert selectieren, wenn...
FromSent OnAttachments
Dennis Sterzenbach26 Sep 2003 13:21 
Rene Fertig27 Sep 2003 03:37 
Dennis Sterzenbach27 Sep 2003 04:21 
Subject:Re: Bestimmten Wert selectieren, wenn INNER JOIN kein Datensatz liefert
From:Rene Fertig (re@renux.de)
Date:09/27/2003 03:37:33 AM
List:com.mysql.lists.mysql-de

Hallo.

Am Freitag, 26. September 2003 22:21 schrieb Dennis Sterzenbach:

Ich habe folgenden SELECT:

SELECT l.priv FROM logins l INNER JOIN users u ON u.uid=l.uid WHERE u.uid=10

Dieser tut das, was ich erwartet habe. Nur möchte ich nun gerne, falls für den Benutzer kein Eintrag in der Tabelle login definiert wurde eine 1 als priv geliefert bekommen.

Was liefert dir dein Select denn in diesem Fall?

Ich würde das aus dem Stehgreif so machen:

SELECT IFNULL(l.priv,1) FROM users u LEFT JOIN logins l USING (uid) WHERE u.uid=10

Funktionsweise: MySQL such alle durch WHERE definierten Datensätze aus users und sucht dann alle die dazu passenden aus logins. Wird nichts passendes in logins gefunden, dann sind die Werte dazu NULL. Die Funktion IFNULL wandelt in diesem Fall das Ergebnis in eine 1.

!! Vorher mit EXPLAIN prüfen, ob die Indizes richtig verwendet werden. Ggf. müssen Indizes für uid in beiden Tabelle angelegt werden, sonst kann die Query u.U. ziemlich lange dauern.

Ich hoffe, das klappt so und ist das was du suchtest.

Ciao, René

----------------------------------------------------------------------