作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用其“父”表中的数据更新 SQL Server 中的此表,如下所示:
表格:销售
id (int)
udid (int)
assid (int)
表:ud
id (int)
assid (int)
sale.assid
包含更新 ud.assid
的正确值。
什么查询可以做到这一点?我正在考虑加入
,但不确定是否可行。
最佳答案
语法严格取决于您使用的 SQL DBMS。以下是在 ANSI/ISO(也适用于任何 SQL DBMS)、MySQL、SQL Server 和 Oracle 中执行此操作的一些方法。请注意,我建议的 ANSI/ISO 方法通常比其他两种方法慢得多,但如果您使用的是 MySQL、SQL Server 或 Oracle 之外的 SQL DBMS,那么它可能是唯一的方法(例如如果您的 SQL DBMS 不支持 MERGE
):
ANSI/ISO:
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where exists (
select *
from sale
where sale.udid = ud.id
);
MySQL:
update ud u
inner join sale s on
u.id = s.udid
set u.assid = s.assid
SQL 服务器:
update u
set u.assid = s.assid
from ud u
inner join sale s on
u.id = s.udid
PostgreSQL:
update ud
set assid = s.assid
from sale s
where ud.id = s.udid;
请注意,Postgres 的 FROM
子句中的目标表不得重复。主要问题:How to do an update + join in PostgreSQL?
甲骨文:
update
(select
u.assid as new_assid,
s.assid as old_assid
from ud u
inner join sale s on
u.id = s.udid) up
set up.new_assid = up.old_assid
SQLite:
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where RowID in (
select RowID
from ud
where sale.udid = ud.id
);
SQLite 3.33 添加了对类似于 PostgreSQL 语法的 UPDATE
+ FROM
语法的支持:
update ud
set assid = s.assid
from sale s
where ud.id = s.udid;
关于sql - 如何在 SQL Server 中使用 JOIN 执行 UPDATE 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1293330/
我是一名优秀的程序员,十分优秀!