Я новичок в stackoverflow, надеюсь, что отправьте мой вопрос правильно.Mysql left join with или condition for fallback language
У меня есть две таблиц «страна» и «countries_lang»
+------+--------------+-----------------+
| id | region_code | sub_region_code |
+------+--------------+-----------------+
| 1 | 142 | 034 |
| 2 | 150 | 154 |
| 3 | 002 | 015 |
+------+--------------+-----------------+
+-----+--------------+---------------+--------------+
| id | pid | lang_code | lang_name | lang_capital |
+-----+------------------+-----------+--------------+
| 1 | 1 | en_GB |Canada | Ottawa |
| 2 | 1 | de_DE |Kanada | Ottawa |
| 3 | 2 | en_GB |Italy | Rome |
+-----+------+-----------+-----------+--------------+
en_GB язык запасного варианта так что моя цель состоит в том, чтобы присоединиться к countries_lang пропускания lnaguage если не в таблице возвращает значение языка запасного варианта
пример:
выбранный язык de_DE
+------+--------------+-----------------+--------------+
| id | region_code | lang_name | lang_capital |
+------+--------------+-----------------+--------------+
| 1 | 142 | Kanada | Ottawa +
| 3 | 150 | Italy | Rome + (fallback language)
+------+--------------+-----------------+--------------+
Я пробовал:
Select * FROM countries AS c
LEFT JOIN (
SELECT pid,
COALESCE(
(
SELECT lang_name FROM countries_lang WHERE lang_code = 'de_DE' AND pid = c.id
),
(
SELECT lang_name FROM countries_lang WHERE lang_code = 'en_GB' AND pid = c.id
)
) AS cl_name,
COALESCE(
(
SELECT lang_capital FROM countries_lang WHERE lang_code = 'de_DE' AND pid = c.id
),
(
SELECT lang_capital FROM countries_lang WHERE lang_code = 'en_GB' AND pid = c.id
)
) AS cl_capital
FROM countries_lang
) AS cl
ON (c.id = cl.pid)
но возвращение c.id НЕИЗВЕСТНЫЙ Колонка
Любое предложение? 2 дня, что я делаю тест, чтобы решить эту проблему
Спасибо всем !!!
EDIT
Я пытался таким образом тоже, но возвращаться всегда языки резервных дорожат
Select * FROM countries AS c
LEFT JOIN (
SELECT pid, lang_name, lang_code FROM countries_lang WHERE lang_code = 'de_DE' AND lang_code IS NOT NULL OR lang_code = 'en_GB'
) AS cl ON
c.id = cl.pid
Непонятно, как присоединиться к вашим двум таблицам, а также непонятно, почему ваш ожидаемый результат показывает английский, когда на самом деле уже есть запись. –
Как вы определяете, какой резерв? –
Привет, я не понимаю, почему соединение не ясно, вырезаем среднюю часть –