从MYSQL中的3个表中选择数据

时间:2013-02-11 16:13:36

标签: mysql sql select

我正在尝试根据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,学院,学生的情况下)已登录网站,如何获取其名称和代码?

希望有人帮我解决这个问题...... 谢谢。

2 个答案:

答案 0 :(得分:2)

如果您想要返回namecode,那么您可以在表格上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将返回第一个非空值。如果登录只能属于其中一个表,那么即使用户是tutorinstitutestudent,使用此选项也会返回正确的值。

如果要在单独的列中返回此内容,则可以使用:

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
祝你好运。