我有三个表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 ;
答案 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