1

次のSQLを使用して、翻訳したいいくつかのキーを取得します。

SELECT * FROM translate_keys 

LEFT JOIN translations 

ON translate_keys.id = translations.translate_key_id 

LEFT JOIN  languages 

ON languages.id = translations.language_id 

WHERE languages.is_default = 1;

キーの翻訳が空の場合、結果は返されません(言語にはコンテンツがあります)。これは、言語が翻訳と関係がないためだと理解しています。私に何ができる?左参加で十分だと思いました!

4

2 に答える 2

2

あなたは間違った方向に参加しています。言語テーブルをマスターテーブルにする必要があります。これを試して:

SELECT * 
FROM languages  
  LEFT JOIN translations ON languages.id = translations.language_id 
  LEFT JOIN translate_keys ON translate_keys.id = translations.translate_key_id 
WHERE languages.is_default = 1;

または、すべてのキーを返そうとして結果が得られない場合は、WHERE基準が原因です。@ Oswaldが正しく指摘しているように、それをJOINに移動すると、レコードを取得する必要があります(明らかに翻訳や言語はありません)。

SELECT * 
FROM translate_keys 
   LEFT JOIN translations ON translate_keys.id = translations.translate_key_id 
   LEFT JOIN  languages ON languages.id = translations.language_id AND languages.is_default = 1;
于 2013-01-29T15:29:08.273 に答える
1

問題はWHERE状態languages.is_default = 1です。これにより、変換が存在しない場合に、左結合によって追加されたすべてのダミーレコードが削除されlanguages.is_defaultますNULL

于 2013-01-29T15:29:41.487 に答える