子选择中的Sqlite3 CASE语句

子选择中的Sqlite3 CASE语句,sqlite,subquery,case,Sqlite,Subquery,Case,在轮询应用程序中,我有以下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.lang

在轮询应用程序中,我有以下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
你看,我选择了属于某个问题的选项,并为每个选项选择了给定语言的对应翻译 此时,如果给定语言没有翻译,则翻译字段为空

请注意,我不能用经典的连接语句替换子查询

为了简单起见,每当找不到翻译时,我想显示一条“缺少翻译”的消息。 我原以为这个查询会起作用,但事实并非如此:

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
事实上,如果给定语言没有翻译,我会得到空字段而不是默认消息。但是如果有翻译,我会得到它们! 查询有什么问题吗?

可能是这样的:

WHERE translations.item_id = options.id AND translations.item_model = 'options' AND translations.language = 'fr'
由于某种原因,在没有转换的情况下不返回任何行,所以CASE语句甚至没有执行,所以得到NULL?
你必须开这张支票

Ops,你是对的:因为我没有该语言的翻译,WHERE条件不返回任何行,因此案例甚至没有执行。。。我认为它仍然返回空值,就像我发布的第一个没有大小写的查询一样,但我猜不是这样。。。