我在通过帐户表中的 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/