2014-01-08 4 views
2

У меня есть запрос, как какSQL запрос - IF EXIST в ИНЕКЕ

SELECT * 
FROM aTable 
LEFT JOIN aTableTranslate 
ON aTable.id = aTableTranslate.aTable_id 
WHERE 
aTableTransalte.language like 'en' 

вопрос является ....

есть ли способ фильтрации, как, как

...

WHERE 
aTableTranslate.language like (IF EXIST_A_FIELD_FOR 'en' THEN 'en' ELSE IF EXIST_A_FIELD_FOR 'jp' THEN 'jp' OR 'cn') 

?

Я хочу показать список с 1. языком посетителя> 2. english ...> или языком по умолчанию.

Возможно ли это по запросу?

+0

да - создать применимый где положение. ... –

+0

http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if –

+1

Что означает этот 'EXIST_A_FIELD_FOR'? –

ответ

2

Вы можете присоединиться к таблицам перевода по отдельности, и выбрать первый не- NULL перевод с COALESCE, как это:

SELECT a.*, COALESCE(t1.translation, t2.translation, t3.translation) as translation 
FROM aTable a 
LEFT JOIN aTableTranslate t1 ON aTable.id = t1.aTable_id AND t1.language like 'en' 
LEFT JOIN aTableTranslate t2 ON aTable.id = t2.aTable_id AND t2.language like 'jp' 
LEFT JOIN aTableTranslate t3 ON aTable.id = t3.aTable_id AND t3.language like 'cn' 
+0

Thnks. Вы точно ответили, что я хочу знать. Благодарю. – user2660234

+0

есть ли способ использования в качестве COALESCE (t1. *, T2. *, T3. *)? – user2660234

+0

@ user2660234 К сожалению, «COALESCE» не может использоваться со звездочками: он выводит на выходе один столбец, поэтому для каждого столбца таблицы перевода вам понадобится один «COALESCE». – dasblinkenlight

0

Попробуйте это:

SELECT a.*, COALESCE(IF(t1.language = 'en', t1.translation, NULL), 
        IF(t1.language = 'jp', t1.translation, NULL), 
        IF(t1.language = 'cn', t1.translation, NULL) 
        ) AS translation 
FROM aTable a 
LEFT JOIN aTableTranslate t1 ON aTable.id = t1.aTable_id AND t1.language IN ('en', 'jp', 'cn')