如何从三个表中检索数据

时间:2011-06-16 13:51:28

标签: sql database join

我有三个表emp管理员和登录,emp和admin每个都有自动增量,我想从emp表中检索emp_name和date_register,从admin表中检索company_name,从登录表中检索last_login_date,在其中应该没有重复的值它。我尝试了所有交叉连接,内连接和外连接,但没有得到所需的数据。请帮忙。什么是正确的查询?以下是我的查询,它给出了重复值:

SELECT DISTINCT tb1_admin_detail.comp_name, tb1_employee_personalinfo.emp_fname, 
tb1_employee_personalinfo.date_registered, tb1_employee_login_detail.login_date FROM 
tb1_admin_detail, tb1_employee_personalinfo, tb1_employee_login_detail  WHERE 
tb1_admin_detail.unit_id = tb1_employee_personalinfo.unit_id && tb1_admin_detail.unit_id = tb1_employee_login_detail.unit_id && 
tb1_employee_personalinfo.Active =1 order BY tb1_employee_login_detail.unit_id ASC, 
tb1_employee_login_detail.emp_id asc,  'tb1_employee_login_detail.login_date' desc ;

2 个答案:

答案 0 :(得分:0)

你正在使用'&&'运算符不是T-SQL,使用AND,也使用INNER JOIN和表别名来简化查询。我认为结果应该是这样的:

SELECT adm.comp_name, emp.emp_fname, emp.date_registered, lgn.login_date 
FROM tb1_admin_detail adm
INNER JOIN tb1_employee_personalinfo emp ON adm.unit_id = emp.unit_id
INNER JOIN tb1_employee_login_detail lgn ON adm.unit_id = lgn.unit_id
WHERE emp.Active = 1
ORDER BY lgn.unit_id ASC, lgn.emp_id asc, lgn.login_date desc 

希望这有帮助。

答案 1 :(得分:0)

要获取上次登录日期,需要自己预先选择,或者从当前员工的登录详细信息中选择max()作为FIELD选择。这就是为什么你要获得多行...每个登录日期都会创建一个新的“不同”条目...尝试

至于你的“Order By”条款......由于你是先通过管理单位id组订购,然后是该组内的员工ID,最新的登录日期永远不会重要,因为那是最低点,因为没有重复的员工,没有影响。

否则,您可以根据预查询的LastLogin列降序...

更改顺序
SELECT DISTINCT
      ta.comp_name, 
      emp.emp_fname, 
      emp.date_registered, 
      PreQuery.LastLogin
   FROM 
      tb1_admin_detail ta

         join tb1_employee_personalinfo emp
            on ta.unit_id = emp.unit_id
            and emp.Active = 1

            join ( select login.emp_id, 
                          max( login.login_date ) as LastLogin
                      from 
                         tb1_employee_login_detail login
                      group by
                         login.emp_id ) PreQuery
               on emp.emp_id = PreQuery.emp_ID

   order BY 
      ta.unit_id, 
      emp.emp_id