Mysql 创建自联接查询
我正在尝试制作考勤系统。对于入住和退房,表的设计如下所示Mysql 创建自联接查询,mysql,sql,self-join,Mysql,Sql,Self Join,我正在尝试制作考勤系统。对于入住和退房,表的设计如下所示 id loginout (datetime) log_type[enum('I','O')] fk_created_id e、 g记录 现在我想在这里签入和签出两个单独的字段,以便计算时间差或一天的总小时数 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
id
loginout (datetime)
log_type[enum('I','O')]
fk_created_id
e、 g记录
现在我想在这里签入和签出两个单独的字段,以便计算时间差或一天的总小时数
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
我正在尝试创建自连接查询,但我不知道将比较哪两个字段。。
如何对此进行自连接查询?在这种类型的查询中,如何知道将比较哪个字段???如果可以帮助您,请检查此字段
想想那个久经考验的例子:员工和经理。这是数据库中的staff表
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)
如果数据中的所有内容都是正确的,例如,如果out=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
你如何确定数据是正确的?如果有两个输入输出,会发生什么呢?OP只想分离当前存储在同一datetime列中的值。我相信你完全误解了这个问题。