SQL JOIN 一對多關係,僅關聯最早、最後一筆日期時間記錄
現有資料表
假設現有 employees (員工) 和 clocks (打卡出勤記錄) 兩張 table 資料。
id | namt |
---|---|
E201308002 | 李四 |
E202003001 | 小美 |
id | in_time | out_time | employees_id (FK) |
---|---|---|---|
1 | 2020-08-25 07:52:00 | 2020-08-25 17:37:00 | E201308002 |
2 | 2020-08-26 07:50:00 | 2020-08-26 17:08:00 | E201308002 |
3 | 2020-08-26 07:53:00 | 2020-08-26 17:24:00 | E202003001 |
4 | 2020-08-27 07:54:00 | 2020-08-27 17:10:00 | E202003001 |
5 | 2020-08-30 07:41:00 | 2020-08-30 17:40:00 | E202003001 |
僅關聯最早、最後一筆日期時間記錄
employees 和 clocks 是一對多 (one-to-many) 的關係,使用 JOIN 的查詢結果則會以 clocks 的資料數量取得對應的 rows。
employees_id | employees_name | clocks_id | clocks_in_time | clocks_out_time |
---|---|---|---|---|
E201308002 | 李四 | 1 | 2020-08-25 07:52 | 2020-08-25 17:37 |
E201308002 | 李四 | 2 | 2020-08-26 07:50 | 2020-08-26 17:08 |
E202003001 | 小美 | 3 | 2020-08-26 07:53 | 2020-08-26 17:24 |
E202003001 | 小美 | 4 | 2020-08-27 07:54 | 2020-08-27 17:10 |
E202003001 | 小美 | 5 | 2020-08-30 07:41 | 2020-08-30 17:40 |
JOIN 透過子查詢 (subquery) 來完成:
- 僅關聯 in_time 最早一筆日期時間記錄。
- 僅關聯 out_time 最後一筆日期時間記錄。
employees_id | employees_name | clocks_first_in_time | clocks_last_out_time |
---|---|---|---|
E201308002 | 李四 | 2020-08-25 07:52 | 2020-08-26 17:08 |
E202003001 | 小美 | 2020-08-26 07:53 | 2020-08-30 17:40 |
參考

本著作係採用創用 CC 姓名標示-相同方式分享 3.0 台灣 授權條款授權.