mysql-如果两个联结表中的一个具有另一个的外键,如何执行两个联结表的联接?

时间:2018-09-04 05:06:29

标签: mysql database-design relational-database junction-table

我是数据库设计的新手,因此我仍在学习,因此对使用不合适的术语感到抱歉,因此,我将尝试用通用语言解释我遇到的问题。我学习了如何在介于两者之间的联结表上联结两个表(获取结果),但是当我想将一个“常规”表和一个联结表联结到另一个联结表时遇到了麻烦。

我有一个关系数据库,其中包含表和它们之间的关系,就像这样:

Relational database design

我知道如何使用hgs_transliterations加入hgs_gardinershgs_meaningshgs_word_typeshgs_translations,但是我不知道该怎么做来连接这四个表和hgs_references表。

这是我用于连接下4个表的代码:

SELECT hgs_transliterations.transliteration, hgs_gardiners.gardiners_code, hgs_meanings.meaning, hgs_word_types.word_type
FROM hgs_translations
JOIN hgs_transliterations ON hgs_translations.transliteration_id = hgs_transliterations.id
JOIN hgs_gardiners ON hgs_translations.gardiners_id = hgs_gardiners.id
JOIN hgs_meanings ON hgs_translations.meaning_id = hgs_meanings.id
JOIN hgs_word_types ON hgs_translations.word_type_id = hgs_word_types.id

我阅读了有关该主题的一些教程,其中提到了ASINNER JOINOUTER JOIN,但是我不太理解术语以及如何使用它来创建所需的内容。抱歉,可能有一些基本问题,但是正如我所说,我只是一个初学者,我想深入了解一些东西,以便可以适当地使用它。预先谢谢你。

P.S。如果有人认为这不是好的数据库设计(表之间的关系设计),我想听听。

1 个答案:

答案 0 :(得分:1)

只需再添加两个联接:

SELECT hgs_transliterations.transliteration, hgs_gardiners.gardiners_code, 
       hgs_meanings.meaning, hgs_word_types.word_type,
       hgs_references.reference
FROM hgs_translations
JOIN hgs_transliterations ON hgs_translations.transliteration_id = hgs_transliterations.id
JOIN hgs_gardiners ON hgs_translations.gardiners_id = hgs_gardiners.id
JOIN hgs_meanings ON hgs_translations.meaning_id = hgs_meanings.id
JOIN hgs_word_types ON hgs_translations.word_type_id = hgs_word_types.id    
JOIN junc_translation_reference ON junc_translation_reference.translation_id = hgs_translations.id
JOIN hgs_references ON hgs_references.id = junc_translation_reference.reference_id