выбрать таблицу по типу? - PullRequest
1 голос
/ 14 марта 2019

У меня проблема с выбором другой таблицы user_details по их user_ID из таблицы аккаунтов,


Таблица счетов

+---------+------------+---------------+------------+
| user_ID | user_Name  | user_Password | user_Level |
+---------+------------+---------------+------------+
| 1       | student    | student       | 1          |
| 2       | instructor | instructor    | 2          |
| 3       | admin      | admin         | 3          |
+---------+------------+---------------+------------+

Student_details

+---------+----------+--------------+
| stud_ID | user_ID  | stud_details |
+---------+----------+--------------+
| 1       | 1        | student      |
| 2       | null     | student2     |
| 3       | null     | student3     |
+---------+----------+--------------+

Instructor_details

+---------+---------+--------------+
| inst_ID | user_ID | inst_details |
+---------+---------+--------------+
| 1       | null    | instructor   |
| 2       | 2       | instructor2  |
| 3       | null    | instructor3  |
+---------+---------+--------------+

и Admin_details такие же, как в таблице подробностей сверху ..

вот мой пример запроса:

SELECT 
ua.user_ID,
ul.level_Name,
ua.user_Name,
ua.user_status,
(CASE
    WHEN ua.level_ID = 1 THEN (SELECT * FROM `record_student_details` rsd WHERE rsd.user_ID = ua.user_ID)
    WHEN ua.level_ID = 2 THEN "2"
    WHEN ua.level_ID = 3 THEN "3"
    ELSE "error"
END) as ulvl FROM `user_accounts` ua
LEFT JOIN user_level ul ON ua.level_ID = ul.level_ID

результат, который я хотел получить, выглядит следующим образом: если user_level равен 1, то информация о пользователе должна быть получена из student_details, тогда, если user_level равен 2, его подробности будут Instructor_details, тогда, если user_level равен 3, то подробности из admin_details

+---------+------------+---------------+------------+--------------------+
| user_ID | user_Name  | user_Password | user_Level | details            |
+---------+------------+---------------+------------+--------------------+
| 1       | student    | student       | 1          | Student_details    |
| 2       | instructor | instructor    | 2          | Instructor_details |
| 3       | admin      | admin         | 3          | Admin_details      |
+---------+------------+---------------+------------+--------------------+

1 Ответ

2 голосов
/ 14 марта 2019

Вы, кажется, хотите что-то вроде этого:

SELECT ua.user_ID, ul.level_Name, ua.user_Name, ua.user_status,
       COALESCE(stud_id, inst_id) as id,
       COALESCE(stud_details, inst_details) as details
FROM user_accounts ua LEFT JOIN
     user_level ul
     ON ua.level_ID = ul.level_ID LEFT JOIN
     student_details sd
     ON sd.user_ID = ua.user_ID AND ua.level_ID = 1 LEFT JOIN
     student_details sd
     ON id.user_ID = ua.user_ID AND ua.level_ID = 2 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...