Mysql-запрос для объединения двух таблиц, используя отношение многие ко многим - PullRequest
0 голосов
/ 28 мая 2018

У меня есть три таблицы с именем Notes, другая таблица с именем Tags и третья в качестве таблицы объединения с именем NoteTagsJoin. Таблица объединения содержит два внешних ключа: первичный идентификатор заметки и первичный идентификатор тега.Я использую этот запрос, чтобы получить все заметки с tagId:

SELECT * FROM notes INNER JOIN note_tag_join ON notes.entryId = note_tag_join.noteId WHERE note_tag_join.tagId =:tagId

И этот запрос, чтобы получить все теги:

SELECT * FROM tags INNER JOIN note_tag_join ON tags.tagId = note_tag_join.tagId WHERE note_tag_join.noteId =:noteId

Как я могу получить заметку и все ее теги, используя только идентификатор заметкис одним запросом?

Ответы [ 3 ]

0 голосов
/ 28 мая 2018
SELECT * FROM table_name
LEFT JOIN table_name2 ON table_name.id = table_name2.id
LEFT JOIN table_name3 ON table_name2.id = table_name3.id
WHERE table_name.id = id;

Измените "id" на соответствующие идентификаторы, которые вы используете.Важно, чтобы идентификаторы в соединениях были связными, иначе между ними не будет никакой связи.

0 голосов
/ 28 мая 2018

Если вы хотите выбрать поля из 3 таблиц, сделайте следующее:

SELECT (fields that you want to show) FROM tableA 
INNER JOIN tableB ON tableA.commonField = tableB.commonField 
INNER JOIN tableC ON tableB.commonField = tableC.commonField 
0 голосов
/ 28 мая 2018

Вы ищете два соединения?

SELECT n.*, t.*
FROM notes n INNER JOIN
     note_tag_join nt
     ON n.entryId = nt.noteId INNER JOIN
     tag t
     ON t.tagId = nt.tagId
WHERE n..entryId = :noteId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...