从sql中的另一个表更新
Posted
技术标签:
【中文标题】从sql中的另一个表更新【英文标题】:update from another table in sql 【发布时间】:2022-01-18 01:29:14 【问题描述】:我有两张桌子。我需要根据where
子句将数据从一个表带到另一个表。
UPDATE cats_new c
SET c.INFO_REQ = (select min(w.tRANSITION_DATE) from CATS_new_history w)
where w.CANDIDATEID = c.CANDIDATE_ID
【问题讨论】:
【参考方案1】:我能想到的两个选项;一个遵循 JNevill 的建议和另一条建议:包括 where
子句以限制将被更新的行,因为 - 如果子查询中没有匹配项 - 您会将这些行的值更新为 NULL
。这就是EXISTS
部分查询处理的内容:
update cats_new c set
c.info_req = (select min(w.transition_date)
from cats_new_history w
where w.candidateid = c.candidate_id
)
where exists (select null
from cats_new_history a
where a.candidateid = c.candidate_id
);
另一个选项是merge
;尽管它通常用于“替换” upsert 操作(update
AND insert
),但如果您仅将其用于其中之一也没问题 - 在这种情况下为 update
;它的on
子句处理哪些行会受到影响:
merge into cats_new c
using (select w.candidateid,
min(w.transition_date) transition_date
from cats_new_history w
group by w.candidateid
) x
on (c.candidate_id = x.candidateid)
when matched then update set
c.info_req = x.transition_date;
【讨论】:
【参考方案2】:这很接近,但您必须将 WHERE 条件移动到子查询中,以便子查询是“相关的”:
UPDATE cats_new c
SET c.INFO_REQ =
(
SELECT min(w.tRANSITION_DATE)
FROM CATS_new_history w
WHERE w.CANDIDATEID = c.CANDIDATE_ID
)
您可以查看更多示例here。特别是第一个示例标记为“示例 - 使用另一个表中的数据更新表”
【讨论】:
以上是关于从sql中的另一个表更新的主要内容,如果未能解决你的问题,请参考以下文章
如果数据是从表中更新的,则应将数据插入到 SQL Server 2017 中的另一个表中
如何使用另一个表中的另一列更新一列? SQL 错误:ORA-00933:SQL 命令未正确结束
一个触发器会激活 SQL Server 中的另一个触发器吗?