我正在尝试根据login_id进行查询以从3个表中获取用户名和他/她的code_number。我有4个名为登录,导师,学院和学生的表。
这是我桌子的结构。
登录表
LOGIN_ID
的login_type导师表
tutor_id
LOGIN_ID
tutor_name
tutor_code学院表
institute_id
LOGIN_ID
institute_name
institute_code学生表
student_id数据
LOGIN_ID
student_name
student_code
当用户登录网站login_id保存在SESSION上然后我需要检查已登录的用户类型,并在确定用户之后需要登录用户的名称和代码。
我的问题是如何检查哪个用户(在Tutor,学院,学生的情况下)已登录网站,如何获取其名称和代码?
希望有人帮我解决这个问题...... 谢谢。
答案 0 :(得分:2)
如果您想要返回name
和code
,那么您可以在表格上JOIN
。您的查询将与此类似:
select l.login_id,
l.login_type,
coalesce(t.tutor_name, i.institute_name, s.student_name) Name,
coalesce(t.tutor_code, i.institute_code, s.student_code) Code
from login l
left join tutor t
on l.login_id =t.login_id
left join institute i
on l.login_id = i.login_id
left join student s
on l.login_id = s.login_id
COALESCE
将返回第一个非空值。如果登录只能属于其中一个表,那么即使用户是tutor
,institute
或student
,使用此选项也会返回正确的值。
如果要在单独的列中返回此内容,则可以使用:
select l.login_id,
l.login_type,
t.tutor_name,
t.tutor_code,
i.institute_name,
i.institute_code,
s.student_name,
s.student_code
from login l
left join tutor t
on l.login_id =t.login_id
left join institute i
on l.login_id = i.login_id
left join student s
on l.login_id = s.login_id
答案 1 :(得分:2)
通过检查Login_Type:
,这是使用CASE
执行此操作的一种方法
SELECT
CASE Login_Type
WHEN 'Tutor' THEN Tutor_Name
WHEN 'Institute' THEN Institute_Name
WHEN 'Student' THEN Student_Name
END Name,
CASE Login_Type
WHEN 'Tutor' THEN Tutor_Code
WHEN 'Institute' THEN Institute_Code
WHEN 'Student' THEN Student_Code
END Code
FROM Login L
LEFT JOIN Tutor T ON L.Login_Id = T.Login_Id
LEFT JOIN Institute I ON L.Login_Id = I.Login_Id
LEFT JOIN Student S ON L.Login_Id = S.Login_Id
祝你好运。