2017-05-12 4 views
1

Ich bekomme Syntaxfehler beim Versuch, die Abfrage unten auszuführen, aber ich würde gerne wissen, ob es möglich ist, so etwas auszuführen? So gibt es einen CASE Ausdruck innerhalb der IN. Folgendes ist nicht wirklich meine Frage, also kann es ein bisschen dumm aussehen, aber es ist nur zum Beispiel.WHERE Spalte IN CASE Typ WHEN

SELECT * 
FROM `table` 
WHERE `category` IN 
    CASE `type` 
     WHEN 'a' THEN ('CAT1','CAT2','CAT3') 
     WHEN 'b' ('CAT4') 
     ELSE ('undefined','n/a') 
    END 
ORDER BY `category` 

Vielen Dank im Voraus.

+0

Es ist im Allgemeinen viel besser und/oder anstelle von CASE in ON und WHERE-Klauseln zu verwenden. Siehe JohnHCs Antwort! – jarlh

Antwort

4

Verwenden OR

SELECT * 
FROM `table` 
WHERE (`type` = 'a' and `category` IN ('CAT1','CAT2','CAT3')) 
OR (`type` = 'b' and `category` IN ('CAT4')) 
or (`type` not in ('a','b') and `category` in ('undefined','n/a')) 
0

könnten Sie versuchen, die folgenden

SELECT * 
FROM `table` 
WHERE CASE `type` 
     WHEN 'a' THEN `category` IN ('CAT1','CAT2','CAT3') 
     WHEN 'b' THEN `category` IN ('CAT4') 
     ELSE `category` IN ('undefined','n/a') 
    END 
ORDER BY `category`