私は正しい方法で私の質問を投稿してください。Mysqlはフォールバック言語を使用して参加するか、フォールバック言語を条件にしました
表にフォールバック言語値
を返さない場合は、私の目標はlnaguageを渡すcountries_langに参加することですので、私は表すen_GBは、フォールバック言語である
+------+--------------+-----------------+
| 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 |
+-----+------+-----------+-----------+--------------+
2テーブル「国」と「countries_lang」を持っています例:
選択した言語が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)
が、リターンはUNKNOWN列
任意の提案をc.id?この問題を解決するためにテストをしている2日間です
ありがとうございます!私も、このようにしてみましたが、常にフォールバック言語値
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
あなたの2つのテーブルを結合する方法は明らかではない、実際にエントリがすでに存在するとき、あなたの予想出力は英語を示し、なぜもそれは明らかではありません。 –
フォールバックはどのように定義しますか? –
参加が持つAS CL ON(c.id = cl.pid) –