0

我正在尝试根据 login_id 进行查询以从 3 个表中获取用户名和他/她的 code_number。我有 4 个名为登录、导师、机构和学生的表。

这是我的表的结构。

登录表
login_id
login_type

导师表 导师
ID
login_id导师
姓名导师
代码

学院表
学院
_id login_id
学院_名称
学院_代码

学生表
student_id
login_id
student_name
student_code

当用户登录到站点 login_id 保存在 SESSION 上时,我需要检查登录的用户类型,识别用户后需要登录用户名和代码。

我的问题是我如何检查哪个用户(在这种情况下是导师、学院、学生)登录到网站,我怎样才能得到它的名称和代码?

希望有人帮助我...谢谢。

4

2 回答 2

2

如果你想返回nameand 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返回第一个非空值。如果登录名只能属于其中一个表,那么即使用户是 a或tutor,使用它也会返回正确的值。institutestudent

如果您想在单独的列中返回它,那么您可以使用:

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
于 2013-02-11T16:18:42.247 回答
2

Here's one way to do it with CASE by checking the Login_Type:

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

Good luck.

于 2013-02-11T16:22:41.760 回答