首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql --如何将连接表连接到另一个具有父表值的连接表?

mysql --如何将连接表连接到另一个具有父表值的连接表?
EN

Stack Overflow用户
提问于 2018-11-14 22:08:51
回答 1查看 50关注 0票数 1

我不知道如何在标题中正确地写出一个问题,但我会尽力解释我想要达到的目标。

这些是我的父表:

代码语言:javascript
复制
 hgs_meaning         hgs_word_types        hgs_transliterations
 +----+---------+    +----+-----------+    +----+-----------------+
 | id | meaning |    | id | word_type |    | id | transliteration |
 +----+---------+    +----+-----------+    +----+-----------------+
 | 3  | man     |    | 4  | noun      |    | 5  | mnjw            |
 +----+---------+    +----+-----------+    +----+-----------------+

这些是我的连接表:

代码语言:javascript
复制
 junc_meaning_word_type
 +----+------------+--------------+
 | id | meaning_id | word_type_id |
 +----+------------+--------------+
 | 2  | 3          | 4            |
 +----+------------+--------------+

 junc_transliteration_meaning_word_type
 +----+--------------------+----------------------+
 | id | transliteration_id | meaning_word_type_id |
 +----+--------------------+----------------------+
 | 1  | 5                  | 2                    |
 +----+--------------------+----------------------+

我知道如何使SELECT JOIN查询以获得junc_meaning_word_type表的结果,但不知道junc_transliteration_meaning_word_type的结果

我知道如何得到这个结果:

代码语言:javascript
复制
 +----+-----------------+-------------------+
 | id | transliteration | meaning_word_type |
 +----+-----------------+-------------------+
 | 1  | mnjw            | 2                 |
 +----+-----------------+-------------------+

我正在努力实现这个结果:

代码语言:javascript
复制
 +----+--------------------+------------+--------------+
 | id | transliteration_id | meaning_id | word_type_id |
 +----+--------------------+------------+--------------+
 | 1  | mnjw               | man        | noun         |
 +----+--------------------+------------+--------------+

这是怎么做到的。我猜想我需要使用嵌套的SELECT查询(子查询)或多个JOIN查询,但我不知道如何构造这样的查询。

以下是我的问题:

代码语言:javascript
复制
/* hgs_meanings and hgs_word_types join to junc_meaning_word_type */

SELECT junc_meaning_word_type.id, hgs_word_types.word_type, hgs_meanings.meaning
FROM junc_meaning_word_type
JOIN hgs_word_types ON junc_meaning_word_type.word_type_id = hgs_word_types.id
JOIN hgs_meanings ON junc_meaning_word_type.meaning_id = hgs_meanings.id 

/* hgs_transliterations and junc_meaning_word_type join to junc_transliteration_meaning */

SELECT junc_transliteration_meaning.id, hgs_transliterations.transliteration, junc_meaning_word_type.id
FROM junc_transliteration_meaning
JOIN hgs_transliterations ON junc_transliteration_meaning.transliteration_id = hgs_transliterations.id
JOIN junc_meaning_word_type ON junc_transliteration_meaning.meaning_word_type_id = junc_meaning_word_type.id

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-15 09:50:20

您可以简单地将所有表与其适当的连接关系一起JOIN,然后SELECT所需的特定列/表达式。您还可以使用SELECT子句中指定的列/表达式来显示它们的不同名称。

同样,为了代码清晰(可读性)和避免模棱两可的行为,在多表查询的情况下,最好在表名上使用混叠

代码语言:javascript
复制
SELECT junctrans.id, 
       trans.transliteration AS transliteration_id, 
       mean.meaning AS meaning_id, 
       typ.word_type AS word_type_id 
FROM 
  junc_transliteration_meaning_word_type AS junctrans
JOIN junc_meaning_word_type AS juncmean 
  ON juncmean.id = junctrans.meaning_word_type_id 
JOIN hgs_transliterations AS trans
  ON trans.id = junctrans.transliteration_id 
JOIN hgs_meaning AS mean 
  ON mean.id = juncmean.meaning_id 
JOIN hgs_word_types AS typ 
  ON typ.id = juncmean.word_type_id 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53309466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档