2016-08-11 4 views
1

MySQL (5.7.x): Gibt es überhaupt ein ternäres Argument in WHERE-Bedingungen?Ternär in WHERE-Bedingung (MySQL)?

Ich versuche, eine AND-Klausel basierend auf dem Wert der Auswahl auszuführen:

SELECT DISTINCT p.user_id, eml.template, eml.subject 
     FROM order_lines ol, email_template eml 
     JOIN user p ON ol.user_id = p.user_od 
     WHERE ol.status in (9.2, 10) 
     -- This line here 
      AND eml.name = (ol.status = 10 'SurveyOne' ? 'SurveyTwo') 

ich User_id bekommen muß, und bedingte Reihe von eml auf ol.status Wert.

Antwort

3

In MySQL ist der ternäre Operator die IF()-Funktion.

AND eml.name = IF(ol.status = 10, 'SurveyOne', 'SurveyTwo') 
+0

Ehrfürchtig:

In einigen Datenbanken (aber nicht MySQL), kann dies zu vereinfachen. Genau das, was ich gesucht habe. Vielen Dank! – guice

0

Normalerweise in SQL, versuchen wir, aus where Klauseln bedingter Logik zu halten (es kann schwieriger sein, einfache Logik zu folgen, als).

So betrachten:

WHERE (ol.status = 10 and eml.name = 'SurveyOne') or 
     (ol.status = 9.2 and eml.name = 'SurveyTwo') 

Hinweis: Die Konstante "9.2" verdächtig ist. Sie müssen sehr vorsichtig sein, wenn Sie Zahlen mit Dezimalpunkten haben und Vergleiche mit = durchführen.

WHERE (ol.status, eml.name) in ((10, 'SurveyOne', (9.2, 'SurveyTwo'))