【发布时间】:2018-11-07 11:51:23
【问题描述】:
在投票应用程序中,我有这个有效的 SQL 查询:
SELECT options.id, options.question_id,
CASE WHEN (options.position = 0) THEN 999 ELSE options.position END AS position,
(SELECT translations.text_1 FROM translations WHERE translations.item_model = 'options' AND translations.language = 'fr' AND translations.item_id = options.id) AS translation
FROM options
WHERE options.question_id IN (1)
ORDER BY options.question_id, position
你看,我选择了属于一个问题的选项,并且为每个选项选择了给定语言的相应翻译
目前,如果没有给定语言的翻译,translation 字段为空。
(请注意,我不能用经典的连接语句替换子查询
为简单起见,我想在找不到翻译时显示'missing translation' 消息。
我认为这个查询会起作用,但事实并非如此:
SELECT options.id, options.question_id, options.is_freetext,
CASE WHEN (options.position = 0) THEN 999 ELSE options.position END AS position,
(SELECT
CASE WHEN (translations.text_1 IS NULL) THEN
'missing traslation' -- but I could do another query here to retrieve something else
ELSE
translations.text_1
END
FROM translations WHERE translations.item_id = options.id AND translations.item_model = 'options' AND translations.language = 'fr') AS translation
FROM options
WHERE options.question_id IN (1)
ORDER BY options.question_id, position
确实,如果没有给定语言的翻译,我会得到null 字段而不是默认消息。但是,如果有翻译,我会得到它们!
查询有什么问题?
【问题讨论】: