【问题标题】:How to retrieve data from three tables如何从三个表中检索数据
【发布时间】:2011-06-16 13:51:28
【问题描述】:

我有三个表 emp admin 和 login,emp 和 admin 每个都有自动递增,我想从 emp 表中检索 emp_name 和 date_register,从 admin 表中检索 company_name,从 login 表中检索 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 ;

【问题讨论】:

    标签: sql database join


    【解决方案1】:

    您正在使用不是 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 
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      要获得上次登录日期,需要由个人自己预先选择,或者从当前员工的登录详细信息中选择 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多