nullを返す:MySQLは参加 - 3つのテーブルを、私は次のスキーマを持って空の
phrase (in U.S. English): translation: code_value:
---------------------- ----------------------------------------- ------------------------------
| phrase_id | phrase | | phrase_id | translation | language_cd | | code class | code value |
---------------------- ----------------------------------------- ------------------------------
| 1 | cheese | | 1 | fromage | FR | | LANGUAGE_CD | FR |
---------------------- ----------------------------------------- | LANGUAGE_CD | DE |
| LANGUAGE_CD | ES |
------------------------------
どのようなデータのこのコレクションはありませんが、与えられた米国英語のフレーズのため、それはあなたに対応する翻訳を与えるさをフランス語、ドイツ語、スペイン語の3言語で提供されています(少なくともウェブアプリケーションのコンテキスト内では、Google翻訳などになることはありません)。
私がしようとしているのは、指定されたフレーズのすべての翻訳のリストを取得することです。指定された言語への翻訳が存在しない場合はNULLを返します。これまで
私のクエリは次のとおりです。返し
SELECT phrase.phrase_id, phrase.string orig_phrase, code_value.code_value, translation.string as trans_phrase
FROM phrase, translation, code_value
WHERE code_value.code_class = 'LANGUAGE_CD' AND translation.phrase_id = phrase.phrase_id
ORDER BY orig_phrase;
:私は私が必要と知っている
-------------------------------------------------------
| phrase_id | orig_phrase | code_value | trans_phrase |
-------------------------------------------------------
| 1 | cheese | FR | fromage |
| 1 | cheese | DE | <NULL> |
| 1 | cheese | ES | <NULL> |
-------------------------------------------------------
:
-------------------------------------------------------
| phrase_id | orig_phrase | code_value | trans_phrase |
-------------------------------------------------------
| 1 | cheese | FR | fromage |
| 1 | cheese | DE | fromage |
| 1 | cheese | ES | fromage |
-------------------------------------------------------
しかし、それは返すようにするために、私はを意図しですNULL値を取得するためにそこにLEFTまたはRIGHT JOINを戻しますが、それを書いている方法を正確に出してください。
これはすべて言われていることですが、明らかにドイツ語とスペイン語の翻訳もあります。私はそれに合わせる必要がありますが、NULL値の目的は明確にどの言語私たちはまだ特定のフレーズを翻訳していません。
私はテストしていませんが、クエリを見て、これは、一致しない言語コードの "phrase_id"と "orig_phase"列にNULL値を出力すると思います。したがって、質問の例では "1、cheese、FR、fromage"、 "NULL、NULL、DE、NULL"、 "NULL、NULL、NULL、ES、NULL"を出力します。 – Abhay
あなたは正しいです。左の結合であったはずです。一定。 –
LEFT JOINも正しくない可能性があります。これは、一致しない言語コードでは結果が表示されないためです。 DEとESは全く表示されません。 – Abhay