在民意调查应用程序中,我有以下有效的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
字段为空。
(请注意,我无法用经典的join语句替换子查询
为简单起见,只要找不到翻译,我想显示一条'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
字段而不是默认消息。但是,如果有翻译,我会得到!
查询出了什么问题?
答案 0 :(得分:1)
这可能是
WHERE translations.item_id = options.id AND translations.item_model = 'options' AND translations.language = 'fr'
由于某种原因,在没有翻译的情况下不返回任何行,因此甚至不执行CASE语句,所以您得到NULL?
您必须进行此检查。