Frage

MySQL-Serverversion 5.0.45.Folgendes berücksichtigen:

( SELECT CASE 
    WHEN t.group_id = 12 THEN 'yes' 
    ELSE 'no' 
    END
    FROM sample_table t
    WHERE t.user_id = 2
    AND t.group_id = 12 ) as foo

Diese Unterabfrage einer größeren Anweisung funktioniert wie erwartet und liefert in den meisten Fällen einen Zeichenfolgenwert „Ja“ oder „Nein“.Es ist nicht ideal, aber das ist es, was man bekommt, wenn man am Code eines anderen arbeitet!

Manchmal kann die Auswahl jedoch legitimerweise eine leere Menge zurückgeben. In diesem Fall wird foo auf NULL gesetzt.Dadurch wird die Anwendung nicht wirklich unterbrochen, es ist jedoch irritierend.Gibt es eine Möglichkeit, sicherzustellen, dass foo immer entweder „yes“ oder „no“ lautet, auch wenn die Tabelle keine passenden Zeilen enthält?

War es hilfreich?

Lösung

Wenn es sich um eine skalare Unterabfrage handelt (d.e.Sie verwenden in a SELECT oder WHERE Klausel, nicht in der FROM-Klausel), dann verwenden Sie Folgendes:

IF(
EXISTS
(
SELECT  NULL
FROM    sample_table t
WHERE   t.user_id = 2
        AND t.group_id = 12
), 'yes', 'no'
)

oder auch das:

COALESCE(
(
SELECT  'yes'
FROM    sample_table t
WHERE   t.user_id = 2
        AND t.group_id = 12
), 'no')

Andere Tipps

Wenn Sie möchten, dass die leere Menge einen „Nein“-Fall darstellt, können Sie stattdessen wahrscheinlich Folgendes tun:

select ... where ... (foo = 'no' or foo is null)

Dies würde beide Fälle behandeln, ohne dass Sie Ihre Unterabfrage drastisch ändern müssten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top