Как соединить соединительную таблицу с другой соединительной таблицей со значениями из родительских таблиц? - PullRequest
0 голосов
/ 15 ноября 2018

Не знал, как правильно написать вопрос в заголовке, но я постараюсь объяснить, чего я пытаюсь достичь.

Это мои родительские таблицы:

 hgs_meaning         hgs_word_types        hgs_transliterations
 +----+---------+    +----+-----------+    +----+-----------------+
 | id | meaning |    | id | word_type |    | id | transliteration |
 +----+---------+    +----+-----------+    +----+-----------------+
 | 3  | man     |    | 4  | noun      |    | 5  | mnjw            |
 +----+---------+    +----+-----------+    +----+-----------------+

Это мои соединительные таблицы:

 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

Я знаю, как получить этот результат:

 +----+-----------------+-------------------+
 | id | transliteration | meaning_word_type |
 +----+-----------------+-------------------+
 | 1  | mnjw            | 2                 |
 +----+-----------------+-------------------+

Я пытаюсь добиться этого результата:

 +----+--------------------+------------+--------------+
 | id | transliteration_id | meaning_id | word_type_id |
 +----+--------------------+------------+--------------+
 | 1  | mnjw               | man        | noun         |
 +----+--------------------+------------+--------------+

Как это можно сделать. Я предполагаю, что мне нужно использовать вложенные SELECT запросы (подзапросы) или несколько JOIN s, но я не знаю, как создать такой запрос.

Вот мои вопросы:

/* 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

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете просто JOIN все таблицы вместе с их соответствующими отношениями соединения, а затем SELECT конкретные столбцы / выражения, которые вам требуются. Вы также можете присвоить псевдоним столбцам / выражениям, указанным в предложении SELECT, чтобы показать для них другое имя.

Опять же, рекомендуется использовать Псевдоним для имен таблиц, в случае многостоловых запросов, для ясности кода (читаемость) и избежания неоднозначного поведения.

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...