我有这两个表A和B:
Table A:
|--------------|----------------|
| ID_A |other attributes|
|--------------|----------------|
| 1 | |
| 2 | |
| 3 | |
| 4 | |
|--------------|----------------|
Table B:
|--------------|----------------|----------------|----------------|
| ID_B | ID_A | update_time |other attributes|
|--------------|----------------|----------------|----------------|
| 1 | 2 |2017/01/01 07:00| |
| 2 | 2 |2017/01/01 11:00| |
| 3 | 2 |2017/01/01 13:00| |
| 4 | 2 |2017/01/01 08:00| |
| 5 | 2 |2017/01/01 06:00| |
| 6 | 3 |2017/01/01 12:00| |
| 7 | 3 |2017/01/01 13:00| |
| 8 | 4 |2017/01/01 17:00| |
|--------------|----------------|----------------|----------------|
现在我想获得表A中每一行的最新更新时间(来自表B)。如果表A和表B之间没有关系,我想显示NULL。上表的理想结果是:
|--------|----------------|
| ID_A | update_time |
|--------|----------------|
| 1 | NULL |
| 2 |2017/01/01 13:00|
| 3 |2017/01/01 13:00|
| 4 |2017/01/01 17:00|
|--------|----------------|
有没有办法在SQL中如何做到这一点?一些解释也没关系。谢谢你的帮助!
答案 0 :(得分:1)
使用LEFT JOIN。这将仅返回表B中的匹配值,并保留表A中的所有值。
LEFT JOIN的子查询将返回ID_A的所有值及其Update_DateTime的MAX值。
Select a.ID_A
b.Update_Time
FROM TABLE A A
LEFT JOIN (Select ID_A, max(Update_Time) as Update_Time
FROM TABLE B
Group by ID_A) B on B.ID_A = A.ID_A