MySQL множественное объединение на основе условий - PullRequest
0 голосов
/ 14 января 2019

У меня есть 3 таблицы .. сказать.

  1. Пользователи (id,name,role_id(FK to roles)
  2. персонал (id,name,user_id(FK to users)
  3. роль (id,name)
  4. студенты (id,name,user_id(FK to users)

мне нужен результат как:
когда пользователь является студентом (roleid = 5), мне нужно присоединиться к таблице ученика и получить сведения об ученике. или когда пользователь является персоналом (role_id = 3), тогда мне нужно получать информацию только из таблицы персонала и отображения. Как это возможно. я написал запрос, который оставил соединение с 2 таблицами, но он показывает другую таблицу, которые не участвуют в этом случае.

Здесь я делюсь тем, с чем сталкиваюсь

    select * 
      from users u 
     JOIN roles r on u.role_id=r.id 
left join staff st on st.user_id=u.id 
left join students s on s.user_id=u.id 
    where u.id=11068

role_id=3:staff и role_id=5 student - это что-то вроде переключателя в программировании на C


Что я ищу, так это

switch(role_id){ case 3: JOIN with students table;return;case 5:JOIN with staff table;return;}

1 Ответ

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

Вы можете использовать эти role_id в объединениях для сотрудников и студентов.

Поскольку имя сотрудника или имя учащегося будет пустым, вы можете использовать COALESCE, чтобы получить только 1 имя.

select 
 u.name as user_name, 
 u.role_id,
 r.name as role_name,
 COALESCE(sta.name, stu.name) AS name
FROM users u 
LEFT JOIN roles r ON r.id = u.role_id
LEFT JOIN staff sta ON (sta.user_id = u.id AND u.role_id = 3)
LEFT JOIN students stu ON (stu.user_id = u.id AND u.role_id = 5)
WHERE u.id = 11068

Но я не думаю, что это необходимо с этими дополнительными правилами в соединениях.

Полагаю, вы могли бы сказать, что кто-то является студентом, если он учится в "студентах".
И персонал, когда они в "штате".
Независимо от role_id.

И в SQL вы можете использовать CASE также в качестве переключателя.

select 
 u.name as user_name, 
 u.role_id,
 r.name as role_name,
 (CASE u.role_id
  WHEN 3 THEN sta.name
  WHEN 5 THEN stu.name
  END) AS name
FROM users u 
LEFT JOIN roles r ON r.id = u.role_id
LEFT JOIN staff sta ON sta.user_id = u.id
LEFT JOIN students stu ON stu.user_id = u.id
WHERE u.id = 11068
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...