2016-05-03 3 views
0

В настоящее время я работаю с базой данных, но я застрял в выборе запроса. Однако я не эксперт по базам данных. Запрос должен возвращать данные из таблицы, которая имеет два отношения от многих до многих.Как выбрать несколько многих ко многим по отношению к одной таблице

Это моя таблица Диаграмма показывает, что бы понятие моего вопроса

enter image description here

Выбрать запрос должны просмотреть три колонки, которые VidTbl.Name, ActorTbl.Name и SubTitelTbl.name.

Итак, я прочитал и поиск в Интернете, и я дал пытается

Сначала попробуйте

SELECT 
     VidTbl.NAME AS Video_Titel_Name, 
     ActorTbl.NAME AS Actor_Name 

FROM ActorInVid 

INNER JOIN VidTbl 

ON VidTbl.Id = ActorInVid.FKVidId 

INNER JOIN ActorTbl 

ON ActorTbl.Id = ActorInVid.FKActorId 



UNION all 

SELECT 
     VidTbl.NAME AS Video_Titel_Name, 
     SubTitelTbl.NAME AS SubTitel_Langu 

FROM SubTitelInVid 

INNER JOIN VidTbl 

ON VidTbl.Id = SubTitelInVid.FKVidId 

INNER JOIN SubTitelTbl 

ON SubTitelTbl.Id = SubTitelInVid.FKSTId 

Результат я получил, это было неправильно

enter image description here

Затем я попробовал другой способ решить эту проблему, но снова у меня есть еще одна ошибка

второй попробовать

SELECT Temp1.* 
From (SELECT VidTbl.Id  AS Video_Id, 
       VidTbl.NAME  AS Video_Titel_Name, 
       ActorTbl.NAME AS Actor_Name 

     FROM  ActorInVid 
     INNER JOIN VidTbl 
       ON VidTbl.Id = ActorInVid.FKVidId 
     INNER JOIN ActorTbl 
       ON ActorTbl.Id = ActorInVid.FKActorId) AS Temp1 

SELECT Temp2.* 
FROM (SELECT VidTbl.Id   AS Video_Id, 
       SubTitelTbl.NAME AS SubTitel_Langu 
     FROM SubTitelInVid 
INNER JOIN VidTbl 
     ON VidTbl.Id  = SubTitelInVid.FKVidId 
INNER JOIN SubTitelTbl 
     ON SubTitelTbl.Id = SubTitelInVid.FKSTId) AS Temp2 


SELECT * 
FROM VidTbl 
INNER JOIN Temp1 
     on Temp1.Video_Id = VidTbl.Id 
INNER JOIN Temp2 
     on Temp2.Video_Id = VidTbl.Id 

Ошибка, у меня в последнее выбрать, что было неправильно

Большое спасибо за вашу помощь любыми способами Я хочу, чтобы мой вопрос четкие и полезные Еще раз спасибо ,

+2

Здесь отличное место, чтобы начать. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ Одно предложение, которое я хотел бы сделать, чтобы ваши имена столбцов были согласованы по всей системе. И не бойтесь использовать настоящие слова. VidID должен иметь одно и то же имя в каждой таблице. Это всегда VidID ... если это не аббревиатура для видео, в этом случае это должен быть VideoID. Я бы также избегал добавления префикса FK и TBL и суффиксов ко всему. Это называется tbl-ing и нахмурилось. Почему бы не имена таблиц, такие как видео, актер, ActorVideo, SubTitle и т. Д. ... –

+0

Спасибо за ваш комментарий и помощь –

ответ

1

Вы близко. Это должно работать ...

SELECT 
VidTbl.Name, 
ActorTbl.Name, 
SubTitelTbl.name 
FROM VidTbl 
INNER JOIN ActorInVid ON VidTbl.Id = ActorInVid.FKVidId 
INNER JOIN ActorTbl ON ActorTbl.Id = ActorInVid.FKActorId 
INNER JOIN SubTitelInVid ON VidTbl.Id = SubTitelInVid.FKVidId 
INNER JOIN SubTitelTbl ON SubTitelTbl.Id = SubTitelInVid.FKSTId 
0
SELECT DISTINCT vt.Name, at.Name, st.Name 
FROM VidTbl vt 
JOIN ActionInVid aiv ON aiv.VidId = vt.Id 
JOIN SubtitleInVid siv ON siv.VidId = vt.Id 
JOIN ActorTbl at ON at.Id = aiv.ActorId 
JOIN SubTitleTbl st ON st.Id = siv.STId 
Смежные вопросы