Как получить данные из трех таблиц - PullRequest
0 голосов
/ 16 июня 2011

У меня есть три таблицы emp admin и login, emp и admin, каждый с автоинкрементом, я хочу получить emp_name и date_register из таблицы emp и company_name из таблицы admin и 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 голосов
/ 16 июня 2011

Чтобы получить дату последнего входа в систему, для этого потребуется либо собственный предварительный выбор по лицу, либо выбрать max () из сведений о входе в систему для текущего сотрудника в качестве поля выбора.Вот почему вы получаете несколько строк ... каждая дата входа будет создавать новую "отдельную" запись ... Попробуйте

Что касается вашего предложения "Order By" ... Так как вы делаете заказ администраторомсначала группа идентификаторов, затем идентификаторы сотрудников в этой группе, последняя дата входа никогда не будет иметь значения, поскольку это самая низкая точка, и, поскольку нет дублирующих сотрудников, это не повлияет.

В противном случае вы можете изменить порядок на основестолбец 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
0 голосов
/ 16 июня 2011

Вы используете оператор '&&', который не является 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 

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...