2013-02-13 7 views
0

У меня есть три таблицы:Я пытаюсь использовать MYSQL SELECT со многими-многими таблицами отношений?

студентов, модулей и students_modules (который является связующим столом). То, что я пытаюсь сделать id, выбирая модули, связанные с конкретным учеником. Я знаю, что это неправильно, но то, что я пытаюсь сделать, это примерно так:

SELECT id, name 
FROM modules 
WHERE id = (SELECT moduleID FROM students_modules WHERE studentID = '123') 

Так может кто-нибудь мне помочь.

+0

просто поставить вместо «=» – sandeepKumar

ответ

3

Использование JOIN связать три таблицы друг с другими:

SELECT 
    s.StudentName, 
    m.Id, 
    m.Name AS ModuleName 
FROM modules    AS m 
INNER JOIN students_modules AS sm ON m.id   = sm.moduleID 
INNER JOIN students   AS s ON sm.studentID = s.id 
WHERE WHERE ms.studentID = '123'; 
1

Попробуйте вместо = для вашего подзапроса:

SELECT id, name 
FROM modules  
WHERE id IN (SELECT moduleID FROM students_modules WHERE studentID = '123') 
+0

Это поможет если для каждого 'studentID' существует более одного' moduleID' –

+1

Yep, OP предлагает, чтобы это было много-много отношений и интуитивно, студент принимал более одного модуля, полагая, что это может быть ошибка OP – Brian

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