【发布时间】:2018-06-04 16:01:08
【问题描述】:
我有 3 个表的 MySql 数据库:
语言
lang_id 语言
单词
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)的翻译和翻译的语言(L2)
【问题讨论】:
-
您给出了两个不清楚的描述,“两种特定语言之间的所有翻译”和“获取语言 1 和 2 之间的翻译”,而您给出的查询却没有这样做。我们怎么知道你想要什么?给出示例 DDL、输入参数和表格以及所需的输出,并使用英语以不依赖示例的方式解释您想要的内容。请阅读minimal reproducible example 并采取行动。 PSPKs, FKs & other constraints are not needed to query.
-
嗨。 “不工作”是什么意思?该查询甚至不解析。阅读手册或任何介绍中的 SELECT 语句的语法。你最里面的括号是不必要的,你的其他人非法分组。子查询(即选择表名可以去哪里)需要括号和别名。但是您不需要 子查询,因为您可以进行一系列连接。从您可以单独工作的部分构建您的查询。
标签: mysql join foreign-keys