2016-11-06 3 views
0

У меня возникли проблемы с попыткой написать SQL-заявление, в котором обнаружены все события, за которые отвечает идентификатор, а затем список всех описаний, связанных с этим событием.Как я могу работать с подзапросом, который предоставляет более одной строки результатов?

Person_tbl 
PersonID (PK INT) 
Name (Varchar eg. "John Smith") 

Event_tbl 
EventID (PK INT) 
SUPV_on_DutyID (FK to PersondID) 
Event_Type (VarChar) 

Details_Event_tbl 
EventID (FK) 
DetailsID (FK) 

Details_Descrip_tbl 
DetailsID (PK INT) 
Details_Desc (VarChar) 

Используя мое заявление, которое я получаю сообщение об ошибке, что я возвращаюсь слишком много строк ... потому что это тот случай, что SUPV может иметь много событий и событий могут иметь много деталей.

Мне нужно ответить «Перечислите все события и подробности событий, в которых« Jphn Smith »несет ответственность».

любая помощь будет оценена

+0

использовать в предложении. но покажите свой запрос .. чтобы мы могли его оценить. – scaisEdge

+0

Используйте 'JOIN'. См. Http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – Barmar

ответ

1

В качестве примера операции объединения:

SELECT p.personid 
     , p.name 
     , e.eventid 
     , e.event_type 
     , d.details_desc 
    FROM `Person_tbl` p 
    JOIN `Event_tbl` e 
    ON e.supv_on_dutyid = p.personid 
    LEFT 
    JOIN `Details_Event_tbl` j 
    ON j.eventid = e.eventid 
    LEFT 
    JOIN `Details_Descrip_tbl` d 
    ON d.detailsid = j.detailsid 
    WHERE p.personid = ? 
    ORDER BY e.eventid, d.detailsid 
+0

, чтобы уточнить, в выбранной части, которую вы использовали p. и e. а затем позже определили их в команде from и join и т. д. Не нужно ли объявлять, что такое p. и e. сначала или сначала введите имена таблиц? – ccices

+0

Я добавил полные имена таблиц, и ваше решение работает красиво. Я не понимаю используемый псевдоним. – ccices

Смежные вопросы