Как сделать SQL Join со многими таблицами (таблицы FK имеют зацикленный идентификатор совместного использования результатов) - PullRequest
0 голосов
/ 16 января 2019

Я новичок в заявлениях SQL и Join, и сейчас я не в своей лиге. В настоящее время у меня есть 6 таблиц базы данных, которые все связаны с основной 7-й таблицей на основе идентификатора основных таблиц, однако вся информация в других 6 таблицах зациклена и поэтому имеет несколько отображаемых результатов для одного идентификатора основных таблиц.

Можно ли объединить их всех в одно заявление о присоединении, чтобы я мог получить результаты, чтобы вся информация из основной таблицы также показывала информацию из 6 других связанных таблиц

Так что, в основном, когда все они объединены, я хочу иметь возможность отображать всю информацию на веб-странице. поэтому мне было интересно, нужно ли мне делать несколько операторов JOIN или только одно длиннее?

Я включил несколько изображений ниже, которые объясняют это визуально. Смотрите примеры 1 и 2

  1. Столбцы, которые выделены желтым цветом, зациклены, чтобы получить много результатов:

Database Tables Relational link 2. Это пример того, как информация зацикливается на база данных, в которой есть много общих Race_id для одного и того же inf_id:

Example of the Loop From History Table

Я не уверен, как он будет выглядеть после объединения, поскольку некоторая информация зацикливается на множество идентификаторов, и не уверен, означает ли это, что необходимо дублировать столбец или строки ?? любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Я думаю, вы не понимаете первичный ключ и внешний ключ. картина, которую вы дали, четко продумывает все. согласно вашей диаграмме БД запрос может быть таким ...

select * from
Influencer i 
Left Join Social s on i.inf_id = s.inf_id
Left Join Owned_Equip o on i.inf_id=o.inf_id
Left Join Ages_Interacted a on i.inf_id = a.inf_id
Left Join Activities ac on i.inf_id = ac.inf_id
Left Join Awards aw on i.inf_id = aw.inf_id
Left Join History h on i.inf_id = h.inf_id

Используя этот запрос, вы можете получить всю информацию Influencer и связанную с ним информацию (Social, Owned_Equip, Activity, Award и т. Д.), Независимо от того, существует она или нет. Если вы используете только «Соединение», а не «Левое объединение», то вы можете найти только те записи, которые являются общими для одного влияющего для связанных с ним сущностей / таблиц, которые вы могли бы сказать. в качестве примера: скажем, Influencer (id = 1, предположим, что имя - dan), после внутреннего объединения мы можем получить только записи, связанные с dan (его социальное, принадлежащее оборудование, активы, награды и т. д., если эти таблицы содержат записи, относящиеся к записи dan)

0 голосов
/ 16 января 2019

Вы можете использовать левое соединение, например, для первых таблиц влияния, социальных, деятельности

select i.*,   s.follower, s.Social_Medial_URL, a.activity, a.result 
from influencer  i 
left join  social s on s.inf_id = i.id 
left join  activities a on  a.inf_id = i.id 

Вы можете самостоятельно добавить левое объединение для других таблиц, используя те же правила

 select i.*
  , s.follower_count
  , s.social_media_url
  , a.compete_activity
  , a.compete_results 
from influencers i 
left join inf_other_social s on s.inf_id = i.id 
left join inf_compete_activity a on a.inf_id = i.id 
LIMIT 0, 25 
...