sql - 从 WHERE 子句中的 SELECT 中的数据更新查询字段
问题描述
我以前见过这个问题,但无法确定如何更改此查询以更新实际在 WHERE 子句中使用的 SELECT 语句中返回的字段(clientid、program、startdate 和 enddate)。如何做到这一点的任何例子都会非常有帮助。谢谢你。
UPDATE baycare_homecare
SET
IsApproved = 1
,ProcessDate = GETDATE()
,clientid = c.ClientID
,program = cp1.Description
,startdate = cp.startdate
,enddate = cp.enddate
WHERE
Processdate IS NULL
AND baycare_homecare.patient_ssn IN
(
SELECT
c.socialsecuritynumber
FROM
carescope_live.dbo.client AS c
,carescope_live.dbo.client_program AS cp
LEFT JOIN
carescope_live.dbo.Code_Program AS cp1
ON
cp1.ULink = cp.ProgramULink
WHERE
c.ulink = cp.clientulink
AND baycare_homecare.service_date
BETWEEN
DATEADD(ss, 1, DATEADD(d, -1, cp.startdate))
AND
DATEADD(ss, -1, DATEADD(d, +1, cp.enddate))
);
解决方案
我无法对此进行测试,但我相信这就是您所追求的:
UPDATE bh
SET IsApproved=1
,ProcessDate = GETDATE()
,clientid = c.ClientID
,program = cp1.Description
,startdate = cp.startdate
,enddate = cp.enddate
FROM baycare_homecare bh
JOIN carescope_live.dbo.client AS c ON bh.patient_ssn = c.socialsecuritynumber
JOIN carescope_live.dbo.client_program AS cp ON c.ulink = cp.clientulink
AND bh.service_date BETWEEN DATEADD(ss, 1, DATEADD(d, -1, cp.startdate)) AND DATEADD(ss, -1, DATEADD(d, +1, cp.enddate)) --this isn't SARGable
LEFT JOIN carescope_live.dbo.Code_Program AS cp1 ON cp1.ULink = cp.ProgramULink
WHERE Processdate IS NULL;
请注意,您所做的是带有s 和别名的“正常”FROM
子句。JOIN
然后,对于您的UPDATE
子句,您改为引用别名。然后,您可以使用它们各自的别名引用其他对象中的列,就像在SELECT
.
推荐阅读
- git - 从 docker 容器内尝试登录失败后 Git 存储库无法访问
- azure - 如何在 Azure 应用配置中添加地图
- amazon-web-services - AWS CLI - 如何加密凭证
- hyperledger-fabric - Hyperledger Fabric 1.4 在迁移到 Kubernetes 1.19 后停止工作,不再工作 /var/run/docker.sock
- android-studio - 从我手机的下载文件夹中导入文件
- typescript - 反应本机打字稿使用正确的 setTimeout 类型
- php - 如何在yii1.1中反转addSearchCondition?
- patch - 如何正确避免意外补丁完成?
- javascript - 如何从实时站点而不是本地节点服务器获取数据库数据
- postgresql - 在 postgres 中每个表的每个实体的属性上搜索一个字符串