sql - 使用多个表更新列时出错
问题描述
更新列时,我收到异常消息:
关键字“ON”附近的语法不正确。
UPDATE item_t0 SET
item_t0.p_enddate=DATEADD(day, 10, item_t0.p_enddate)
FROM employee item_t0
WHERE EXISTS(SELECT '1' FROM
orders item_t2 ON item_t2.p_id = item_t0.p_subsid JOIN
departs item_t4 ON item_t4.PK = item_t0.p_contract JOIN
constantvalues3b item_t1 ON item_t0.p_status = item_t1.PK
WHERE
item_t0.p_startdate > 'Aug 10, 2020 12:00:00 AM' and item_t0.p_enddate < 'Sep 10, 2020 12:00:00 AM'
AND item_t1.Code in('Active')
AND item_t0.p_planid ='asdcg'
AND item_t0.customer='1234567'
)
解决方案
您似乎正在尝试将您的子查询加入到父查询中,这在这种格式中是不可能的。而是将其移至 where 子句的一部分。
注意:我强烈建议您花时间以一种简洁的逻辑方式来布局您的查询 - 更容易调试。
UPDATE item_t0 SET
item_t0.p_enddate = DATEADD(day, 10, item_t0.p_enddate)
FROM employee item_t0
WHERE EXISTS (
SELECT '1'
FROM orders item_t2
-- Move to where clause
-- ON item_t2.p_id = item_t0.p_subsid
JOIN departs item_t4 ON item_t4.PK = item_t0.p_contract
JOIN constantvalues3b item_t1 ON item_t0.p_status = item_t1.PK
WHERE item_t0.p_startdate > 'Aug 10, 2020 12:00:00 AM' and item_t0.p_enddate < 'Sep 10, 2020 12:00:00 AM'
AND item_t1.Code in ('Active')
AND item_t0.p_planid = 'asdcg'
AND item_t0.customer = '1234567'
-- Moved fdrom attemped join
AND item_t2.p_id = item_t0.p_subsid
)
推荐阅读
- function - 如何在继承类中使用特定类型的父类中的 Must Override 泛型类型函数
- android - 如何使用 Choreographer 将动画与 VSync 同步?
- javascript - 使用正则表达式为最多前两组两个数字添加分隔符
- linux - 我该如何解决这个linux问题?
- typescript - 强制使用给定类型之一的 TypeScript 类型
- javascript - 在域上运行 socket.io
- react-native - redash useValue vs reanimated 2 useSharedValue
- python - 如何在 Python 中对我的 Dataframe 的每一列进行 ADF 测试?
- android-studio - kotlin中的Listview,我无法将其更改为多项选择
- peerjs - PeerJS 服务器在 Web 浏览器中运行时崩溃