mysql - 按类型选择表?

标签 mysql sql phpmyadmin

我在通过帐户表中的 user_ID 选择不同的 user_details 表时遇到问题,


账户表

+---------+------------+---------------+------------+
| 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     |
+---------+----------+--------------+

讲师详情

+---------+---------+--------------+
| 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      |
+---------+------------+---------------+------------+--------------------+

最佳答案

你似乎想要这样的东西:

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 

关于mysql - 按类型选择表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55167555/

相关文章:

mysql - 用于删除列上的部分 URL 的 SQL 语句

php - 在不同用户帐户之间共享 Mysql DB 表

mysql - SQL - 加入 MAX(created_at)

mysql - SQL 查询子句的顺序

MySql:将三个表合并在一起

mysql - 如何在多列中针对我的用户表进行 SQL 连接?

mysql - SQL Select and Join Tables 以显示结果

sql - 为什么带有 DELETE 的 PostgreSQL CTE 不起作用?

MYSQL导入存储过程报错1064

mysql - phpMyAdmin 错误#1210