@RA
RA
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 таблиц недостающими значениями для всех языков.

25 Oct 2017

В where указать таблицу 2 раза, с left outer join, выбрать через ifnull

25 Oct 2017

Придётся делать ifnull для каждого запрашиваемого поля?
Оказалось, что исходный вариант не тормозит.

#ozbux/3 в ответ на /2
25 Oct 2017

А сколько полей? Думал у тебя таблица с 1 строкой в которой код строки, код языка, значение.

#ozbux/4 в ответ на /3
25 Oct 2017

обычно name и description.

#ozbux/5 в ответ на /4
25 Oct 2017

Короче у тебя в исходном sql нету имени строки. И твой екзист не привязан по ней. Но он делает тот же самый join что и мои 2 таблицы во фром, только ты джойнишь "руками". По перфомансу на больших таблицах будет разница, а у тебя наверное вообще кот наплакал данных, поэтому работает и ладно.

#ozbux/6 в ответ на /5

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.