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列中的值。我相信你完全误解了这个问题。