24 Oct
2017
Нужно получить строки с lang='EN', только если не нашлась строка с lang='RU'
Есть такое решение
SELECT *
FROM table
WHERE lang IN ('EN', 'RU')
AND (lang='RU' OR NOT EXISTS(SELECT lang FROM table WHERE lang='RU'))
Но по-моему такой запрос просто обязан тормозить.
Борюсь с собой или прокостылять так всего в одном месте или дозаполнить ~20 таблиц недостающими значениями для всех языков.
Придётся делать ifnull для каждого запрашиваемого поля?
Оказалось, что исходный вариант не тормозит.
А сколько полей? Думал у тебя таблица с 1 строкой в которой код строки, код языка, значение.
обычно name и description.
Короче у тебя в исходном sql нету имени строки. И твой екзист не привязан по ней. Но он делает тот же самый join что и мои 2 таблицы во фром, только ты джойнишь "руками". По перфомансу на больших таблицах будет разница, а у тебя наверное вообще кот наплакал данных, поэтому работает и ладно.