Получение информации из 2 родительских таблиц, на которые ссылаются в 1 дочерней таблице

#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;