#mysql #sql #database #many-to-many #relational-database
#mysql #sql #База данных #многие-ко-многим #реляционная база данных
Вопрос:
Представьте себе эти таблицы
Лица
id name
1 John
2 Jane
3 Joe
4 Jill
Вещи
id name
1 Apple
2 Banana
3 Carrot
Имеет
pid tid
1 1
1 2
2 3
Где Has
отношение «многие ко многим» между Person
s и Thing
s. Как я смогу получить исходную информацию родительской таблицы для всех Person
s и Thing
s, которые имеют отношение?
В основном что-то вроде:
pname tname
John Apple
John Banana
Jane Carrot
Это звучит как одна из самых фундаментальных вещей SQL, поэтому я знаю, что это основной вопрос, но я не смог правильно сформулировать его, поэтому я не смог найти ответы во время поиска.
Ниже приведен запрос, который я пробовал. Я знаю, что это был бы только первый шаг, так как он вовлекает Person
s, но не уверен Things
, как это сделать
SELECT
*
FROM
person p
INNER JOIN has h
ON p.id = h.pid;
Комментарии:
1. Подсказка:
JOIN
. иJOIN
снова. Можете ли вы показать запрос, который вы пробовали?2. Отредактировано, чтобы добавить то, что у меня есть до сих пор. Это получает все
Person
s, которые имеют отношение Has. Я понимаю, что вы имеете в виду, когда вам нужно снова присоединиться, но я не уверен, что именно. Будет ли этоJOIN
работатьThing
с этим промежуточным запросомthing.id = h.id
?
Ответ №1:
Итак, вы продолжаете:
SELECT . . . -- the columns you want
FROM person p INNER JOIN
has h
ON p.id = h.pid INNER JOIN
thing t
ON t.id = h.tid;