2017-10-10 1 views
-1

ich den folgenden Code haben:mySQL: Filter auf einer Säule mit CASE

SELECT 
    t1.a 
    t1.b 
    CASE WHEN t1.c = Z THEN m 
     WHEN t1.c = Y THEN n 
     ELSE p END as m_or_n_or_p 
    FROM t1 

Kann ich hinzufügen

WHERE m_or_n_or_p = m 

am Ende und auf diese Weise filtern meine Abfrage oder muss ich einpacken Alles in einem anderen SELECT?

+2

_... Kann ich hinzufügen ..._ Haben Sie versucht, um zu sehen was passiert? –

+1

Ja, Sie können einen Filter wie diesen hinzufügen. Wie jedoch @ B001 sagt, sollten Sie versuchen, ein paar Dinge zu tun, bevor Sie nur eine Frage stellen. –

Antwort

1

MySQL erlaubt keine Verwendung von Aliasen in der where Klausel. Wenn Sie nicht über die Abfrage in einer zusätzlichen Abfrage wickeln möchten, können Sie immer den Ausdruck aus der Auswahlliste replizieren auf die where Klausel:

SELECT t1.a 
     t1.b 
     CASE WHEN t1.c = Z THEN m 
      WHEN t1.c = Y THEN n 
      ELSE p 
     END as m_or_n_or_p 
FROM t1 
WHERE CASE WHEN t1.c = Z THEN m 
      WHEN t1.c = Y THEN n 
      ELSE p 
     END = m