2014-01-08 43 views
2

我有一個查詢像SQL查詢 - 是否存在在WHERE子句

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.英語...>或默認語言顯示列表。

有沒有可能通過查詢?

+0

是 - where子句創建一個適用。 ... –

+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')