У меня есть две таблицы:левый присоединиться запрос со всеми возможными комбинациями
языки, как индекс моих языков.
isolanguage
"de"
"en"
"es"
"fi"
"fr"
"no"
"pl"
"ru"
И переводы, где хранить переводы мест:
Name, translation, isolanguage
"Umeå Airport";"Flughafen Umeå";"de"
"Umeå Airport";"Umeå Airport";"en"
"Umeå Airport";"Aeropuerto de Umeå";"es"
"Umeå Airport";"Uumajan lentoasema";"fi"
, что я пытаюсь получить это список всех элементов в таблице переводов для каждого языка в языковой таблице.
Ожидаемый результат:
"Umeå Airport";"Flughafen Umeå";"de"
"Umeå Airport";"Umeå Airport";"en"
"Umeå Airport";"Aeropuerto de Umeå";"es"
"Umeå Airport";"Uumajan lentoasema";"fi"
"Umeå Airport";NULL;"fr"
"Umeå Airport";NULL;"no"
"Umeå Airport";NULL;"pl"
"Umeå Airport";NULL;"ru"
Дело в том, что мне нужно все языки, имеющие перевод или нет.
Я пытаюсь левый присоединиться запрос, но не работает, это только показывает элементы, которые в обеих таблицах (за исключением NULLS)
select * from languages a
left join translations b
on (a.isolanguage = b.isolanguage)
"Umeå Airport";"Flughafen Umeå";"de"
"Umeå Airport";"Umeå Airport";"en"
"Umeå Airport";"Aeropuerto de Umeå";"es"
"Umeå Airport";"Uumajan lentoasema";"fi"
NULL;NULL;"fr"
NULL;NULL;"no"
NULL;NULL;"pl"
NULL;NULL;"ru"
Вы должны делать что-то неправильно или иначе, чем вы описали. Я только что воспроизвел вашу установку, и запрос дал именно то, что вам нужно, включая строки с «NULL» для перевода. –
Вы правы. Но то, что я ищу, также должно иметь значение для первого поля. например: Аэропорт Умео; NULL; «fr» Аэропорт Умео, NULL; «Нет. Если у меня нет этого поля, у меня будет много пустых полей с« fr »для всего стола. – ppardoz
Well , в этом случае вам нужно нормализовать вашу схему. Извлеките имена (первый столбец) в новую таблицу и дайте им идентификатор. Затем вы можете запросить перекрестное произведение языков и эту новую таблицу, которая создаст все возможные записи. По левому соединению с таблицей переводов вы получите то, что вам нужно. –