2016-06-03 9 views
1

у меня есть 4 таблицы в моей базе данных:MySQL JOIN между тремя таблицами

users (id,name) 
roles (id,name) 
positions (id,name) 
position_user (user_id,position_id) 
  • Отношения между пользователями ролей 12:59
  • отношений между позициями пользователей многие ко многим

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

SELECT pu.user_id AS user_id, 
     group_concat(p.name separator ',') AS list_pos 
FROM position_user pu 
INNER JOIN positions p 
     ON p.id = pu.position_id 
GROUP BY pu.user_id 

И другой должен быть такой:

SELECT users.id, users.first_name, roles.name 
FROM users 
JOIN roles 
    ON users.role_id = roles.id 

Могу ли я объединить эти два в одном запросе, и как?

+0

Показать данные образца и желаемого результата. \t Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –

ответ

1

Попробуйте что-нибудь подобное и проверьте документацию по MySQL.

SELECT pu.user_id AS user_id, u.first_name, r.name as rol_name, group_concat(p.name separator ',') AS list_pos 
    FROM position_user pu 
    INNER JOIN positions p ON p.id = pu.position_id 
    INNER JOIN users u ON u.id = pu.uder_id 
    INNER JOIN roles R ON u.role_id = r.id 
    GROUP BY pu.user_id, u.first_name, r.name 
+0

Спасибо, что работает sql. – deshi

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