[英]Create self join query
我正在尝试建立考勤系统。 签入和签出表的设计如下
id
loginout (datetime)
log_type[enum('I','O')]
fk_created_id
例如记录
现在,我要在两个单独的字段中签入和签出,以便可以计算出时间差或一天中的总时数。
7 2014/07-31 06:00:32 I 1
8 2014/07-31 09:10:32 O 1
9 2014/07-31 09:30:32 I 1
10 2014/07-31 12:00:32 O 1
我正在尝试创建自联接查询,但是在这里我不知道将要比较哪个两个字段。如何为此进行自联接查询?在这种类型的查询中,如何知道将要比较哪个字段?
检查了这一点,如果这能帮助你
考虑一个久经考验的例子:员工和经理。 这是数据库中的人员表
mysql> select * from staff;
+----+------------+-----------+------------+
| id | first_name | last_name | manager_id |
+----+------------+-----------+------------+
| 1 | Hattie | Hopkins | 4 |
| 2 | Henry | Hopkins | 4 |
| 3 | Harry | Hopkins | 5 |
| 4 | Helen | Hopkins | NULL |
| 5 | Heidi | Hopkins | 4 |
| 6 | Hazel | Hopkins | 1 |
+----+------------+-----------+------------+
6 rows in set (0.00 sec)
为了查看谁向谁报告,我们需要查询表以获取员工,并再次获取经理的姓名。
mysql> select e.first_name as employee, m.first_name as reports_to
-> from staff e
-> inner join staff m on e.manager_id = m.id;
+----------+------------+
| employee | reports_to |
+----------+------------+
| Hattie | Helen |
| Henry | Helen |
| Harry | Heidi |
| Heidi | Helen |
| Hazel | Hattie |
+----------+------------+
5 rows in set (0.02 sec)
如果数据中的所有内容都正确,例如outs = ins,则查询非常简单
select s1.*,s1.o-s2.i from
(select sum(loginout) o from t1 where log_type="O" and date(loginout)='2014-07-31') s1,
(select sum(loginout) i from t1 where log_type="I" and date(loginout)='2014-07-31') s2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.