我有两张桌子
表A(从某个表中得到一个视图):
从表A查询:
SELECT view_person_schedule。,view_history_absen。,TIMEDIFF(time_in,schedule_time_in)AS迟到,TIMEDIFF(schedule_time_out,time_out)为超时人员JOIN view_history_absen ON view_history_absen.ID = view_person_schedule.ID
表A:
ID |日期| time_in | time_out |
1 | 2014-06-01 | 07:00 | ........ |
1 | 2014-06-02 | 08:00 | ........ |
1 | 2014-06-03 | 08:10 | ........ |
1 | 2014-06-04 | ..... | ........ |
1 | 2014-06-05 | ..... | ........ |
1 | 2014-06-10 | ..... | ........ |
1 | 2014-06-14 | ..... | ........ |
表B:
ID | dates_exc |信息|
1 | 2014-06-06 | NULL |
1 | 2014-06-07 | NULL |
1 | 2014-06-08 | NULL |
1 | 2014-06-09 | NULL |
1 | 2014-06-11 | SICK |
1 | 2014-06-12 | SICK |
1 | 2014-06-13 | SICK |
我的问题是:如何使结果数据如下所示:
ID |日期| time_in | time_out |
1 | 2014-06-01 | 07:00 | ........ |
1 | 2014-06-02 | 08:00 | ........ |
1 | 2014-06-03 | 08:10 | ........ |
1 | 2014-06-04 | ..... | ........ |
1 | 2014-06-05 | ..... | ........ |
1 | 2014-06-06 | NULL | ........ |
1 | 2014-06-07 | NULL | ........ |
1 | 2014-06-08 | NULL | ........ |
1 | 2014-06-09 | NULL | ........ |
1 | 2014-06-10 | ..... | ........ |
1 | 2014-06-11 | SICK | ........ |
1 | 2014-06-12 | SICK | ........ |
1 | 2014-06-13 | SICK | ........ |
1 | 2014-06-14 | ..... | ........ |
请有人帮助我。
答案 0 :(得分:0)
假设两个表中没有重叠日期,或者您希望结果中有两行,请使用UNION
:
SELECT id, dates, time_in, time_out
FROM TableA
UNION
SELECT id, dates_exc, information, NULL
FROM TableB
如果表B在重叠时优先:
SELECT dates.id, dates.dates, IFNULL(b.information, a.time_in) AS time_in, a.time_out
FROM (SELECT id, dates
FROM tableA
UNION DISTINCT
SELECT id, dates
FROM tableB) AS dates
LEFT JOIN tableB AS b ON dates.id = b.id AND dates.dates = b.dates
LEFT JOIN tableA AS a ON dates.id = a.id AND dates.dates = a.dates