2017-12-21 49 views
-1

で登録しよう:LANG2つの外部キーは、私は3つのテーブルでMySQLデータベース持ってWHERE句

         をLANG_ID

言語を

単語
word_id                単語

翻訳
TRANS_ID         word_id1     word_id2

LANG_IDそして私は、私が選択した二つの言語間のすべての翻訳を取得したいです。私は、言語と間の翻訳を取得しようとしている コマンドで
Two foreign keys of the same table. How do I write this SELECT statement?
MySQL multiple Inner Join with Where clause

:コマンド(間違った構文を使用して)、以下に基づいています。私は、このコマンドを思いつい@アハメド・gdomaへ

SELECT w1.word, lang1.lang AS w2.word, lang2.lang AS FULL 
    FROM translation AS trans 
    (JOIN (word AS w1 JOIN language AS lang1 ON lang1.id_lang=w1.lang_id) 
     ON trans.word_id1=w1.id_word WHERE (w1.lang_id=1 OR w1.lang_id=2)) 
    (JOIN (word AS w2 JOIN language AS lang2 ON lang2.id_lang=w2.lang_id) 
     ON trans.word_id2=w2.id_word WHERE (w2.lang_id=1 OR w2.lang_id=2)) 

SOLUTION ありがとう:

SELECT w1.word AS w1, l1.lang AS L1,w2.word AS w2, l2.lang AS L2 FROM translation AS t 
JOIN word AS w1 on w1.id_word=t.word_id1 
JOIN word AS w2 on w2.id_word=t.word_id2 
JOIN language AS L1 on w1.lang_id=L1.id_lang 
JOIN language AS L2 on w2.lang_id=L2.id_lang 
WHERE (l2.id_lang=1 OR l2.id_lang=2) 
AND (l1.id_lang=2 OR l1.id_lang=1) 

それは言葉(W1)、その言語(L1)の翻訳を返します。単語(w2)と翻訳の言語(L2

+0

重複[二つの異なる列に対して、別のSQLテーブルからデータを照合取得する方法:?内部結合および/または連合](https://stackoverflow.com/q/27682228/3404097) – philipxy

+0

ます「2つの特定の言語間のすべての翻訳」と「言語1と2の間の翻訳を取得する」という2つの不明瞭な説明を与え、それをしないクエリを与えます。私たちはあなたが望むものをどのように知っていますか?DDLの例、パラメータと表の入力、希望する出力を英語にして、この例に頼らない方法であなたが望むものを説明してください。 [mcve]を読んで行動してください。 PS [PKs、FKs、その他の制約は問い合わせに必要ありません。](https://stackoverflow.com/a/23842061/3404097) – philipxy

+0

こんにちは。 「うまくいかない」とはどういう意味ですか?そのクエリは解析さえしません。マニュアルまたはイントロのSELECT文の構文を読んでください。あなたの最も内側の括弧は不要で、あなたの他の括弧は違法にグループ化されています。サブクエリ(つまり、テーブル名を指定できるselect)には、括弧とエイリアスが必要です。しかし、一連の結合を行うことができるため、サブクエリは必要ありません。別々に作業する部分からクエリを作成します。 – philipxy

答えて

0

問題は、MySQLでFULLreserved keywordであるため、ASの別の名前を選択する必要があるということです。以下で

、私はCOMBINEDでこれを置き換える:

SELECT w1.word, lang1.lang AS w2.word, lang2.lang AS COMBINED 
FROM translation AS trans 
(JOIN (word AS w1 JOIN language AS lang1 ON lang1.id_lang=w1.lang_id) 
    ON trans.word_id1=w1.id_word WHERE (w1.lang_id=1 OR w1.lang_id=2)) 
(JOIN (word AS w2 JOIN language AS lang2 ON lang2.id_lang=w2.lang_id) 
    ON trans.word_id2=w2.id_word WHERE (w2.lang_id=1 OR w2.lang_id=2) 

・ホープ、このことができます! :)

+0

私は「AS」を取り除き、「FULL」を「COMBINED」と置き換えました。悲しいことに、まだうまくいきません。 –

+0

@ObsidianAge ASは、標準SQLのFROM&SELECTの両方でオプションです。 MySQLもここでタグ付けされています。 – philipxy

0
SELECT w1.word AS L1,w2.word as L2 FROM translation AS t 
JOIN word AS w1 on w1.word_id=t.word_id1 
JOIN word AS w2 on w2.word_id=t.word_id2 
+0

ありがとう、これは私が求めていたものではなく、正しいコマンドにつながった。あなたの命令は言葉だけを返し、私は言葉+言語が欲しかった。ここで私が思いついたのは: '選択w1.word AS w1、l1.lang AS L1、w2.word AS W2、l2.lang AS L2 FROM翻訳AS t w1.id_word = tでJOIN word AS w1。 word_id1 w2.id_word = t.word_id2の上に単語w2をジョインする w1.lang_id = L1.id_langの上にJOIN言語AS L1 w2lang_id = L2.id_langのJOIN言語AS L2 ' –

関連する問題