同一个表的两个外键和WHERE子句

时间:2017-12-21 23:25:24

标签: mysql join foreign-keys

我有3个表的MySql数据库:

语言
lang_id lang

字符
word_id lang_id

翻译
trans_id word_id1 word_id2

我希望获得我选择的两种语言之间的所有翻译。以下命令(语法错误)基于:
Two foreign keys of the same table. How do I write this SELECT statement?
MySQL multiple Inner Join with Where clause

在命令中,我试图在语言 1 2 之间进行翻译。

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))

感谢@ ahmed-gdoma,我想出了这个命令:

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)的翻译和翻译语言< EM>(L2 )

2 个答案:

答案 0 :(得分:0)

问题是FULL在MySQL中是 reserved 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)

希望这有帮助! :)

答案 1 :(得分: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