如何基于匹配的T1_id将Table1的expiry_date填充到Table2新列
匹配关联表更新Table2的expiry_date列
需求说明
Table2已新增expiry_date列,需在Table2的T1_id与Table1的Id匹配时,将Table1的expiry_date字段值填充到Table2的对应列中。
表结构与数据
Table1
| Id | place | expiry_date |
|---|---|---|
| 10 | xyz | 2022-09-12 |
Table2(expiry_date为新增列)
| Oid | userid | expiry_date | T1_id |
|---|---|---|---|
| 2 | 123 | 10 |
正确SQL方案
你之前尝试用INSERT语句是不合适的,因为我们要更新已有记录的列值,而非插入新行。正确的做法是使用UPDATE结合JOIN实现:
标准SQL写法
UPDATE Table2 SET expiry_date = Table1.expiry_date FROM Table1 WHERE Table2.T1_id = Table1.Id;
MySQL写法
UPDATE Table2 JOIN Table1 ON Table2.T1_id = Table1.Id SET Table2.expiry_date = Table1.expiry_date;
PostgreSQL写法
与标准SQL写法一致,也可采用显式JOIN形式:
UPDATE Table2 SET expiry_date = Table1.expiry_date FROM Table1 WHERE Table2.T1_id = Table1.Id;
语句说明
- 仅更新Table2中
T1_id能在Table1找到对应Id的记录 - 未匹配到的Table2记录,其
expiry_date列值保持原有状态(NULL或初始值)
内容的提问来源于stack exchange,提问作者Shwetha Sai
相关产品推荐
相关产品推荐

