В принципе, есть таблица атрибутов и таблица переводов - много переводов для одного атрибута.
Мне нужно выбрать id и значение из перевода для каждого атрибута на указанном языке, даже если на этом языке нет записи перевода. Либо я пропускаю какую-либо технику соединения, либо присоединяюсь (без использования языковой таблицы), здесь не работает, поскольку после этого не возвращаются атрибуты с не существующими переводами на указанном языке.
select a.attribute, at.id, at.translation
from attribute a left join attributeTranslation at on a.id=at.attribute
where al.language=1;
Итак, я использую подзапросы, подобные этому, проблема здесь заключается в создании двух подзапросов в одну и ту же таблицу с одинаковыми параметрами (это похоже на утечку производительности, если только mysql не группирует те, которые я сомневаюсь, поскольку он заставляет вас делать много подобных подзапросов)
select attribute,
(select id from attributeTranslation where attribute=a.id and language=1),
(select translation from attributeTranslation where attribute=a.id and language=1),
from attribute a;
Я хотел бы иметь возможность получать id и перевод из одного запроса, поэтому я concat столбцы и получить идентификатор из строки позже, что, по крайней мере, делает один подзапрос, но все еще не выглядит правильно.
select attribute,
(select concat(id,';',title)
from offerAttribute_language
where offerAttribute=a.id and _language=1
)
from offerAttribute a
Итак, часть вопроса. Есть ли способ получить несколько столбцов из одного подзапроса или использовать два подзапроса (mysql достаточно умен, чтобы сгруппировать их?) Или присоединяется к следующему пути:
[[атрибут для языка] для перевода] (объединение трех таблиц выглядит хуже, чем подзапрос).