В приложении опроса у меня есть этот рабочий 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
поля вместо сообщения по умолчанию. Но если есть переводы, я их получу!
Что не так с запросом?