更新查询更新所有记录 - 只希望选择记录更新
Posted
技术标签:
【中文标题】更新查询更新所有记录 - 只希望选择记录更新【英文标题】:Update Query Updating All Records - Only Want Select Records Updated 【发布时间】:2018-11-28 17:58:17 【问题描述】:更新:我正在使用来自以下响应的查询。运行此查询时,如果未找到与 where 条件匹配的字段,则会清除 SERVICE_DATE_OUT 字段。有解决办法吗?
UPDATE PMEQMT P
SET SERVICE_DATE_OUT = (SELECT MAX(TL.TRANS_DATE)
FROM TRANSLOG TL
WHERE P.EQNO = TL.ITEMNO AND
TL.LOC_DESC = 'E-OUT OF SERVICE' AND
TL.TRANS_DATE >= SYSDATE - 1
)
WHERE P.CLASS = 'TL'
我在这里要完成的是,当 TRANSLOG 表上的 ITEMNO 位于 E-OUT OF SERVICE/E-IN SERVICE 位置并与 PMEQMT.EQNO 匹配时,然后更新相应 PMEQMT.EQNO 的 SERVICE_DATE_OUT/IN .
查询正在更新 PMEQMT 表中所有记录的 SERVICE_DATE_OUT/IN。有人可以帮我修改我的查询以仅将匹配的 PMEQMT.EQNO 更新为 TRANSLOG.ITEMNO 吗?
UPDATE PMEQMT
SET SERVICE_DATE_OUT = (SELECT B.TRANS_DATE
FROM TRANSLOG B, PMEQMT A
WHERE A.EQNO = B.ITEMNO AND
A.CLASS = 'TL' AND
B.LOC_DESC = 'E-OUT OF SERVICE' AND
B.TRANS_DATE >= SYSDATE - 1)
UPDATE PMEQMT
SET SERVICE_DATE_IN = (SELECT B.TRANS_DATE
FROM TRANSLOG B, PMEQMT A
WHERE A.EQNO = B.ITEMNO AND
A.CLASS = 'TL' AND
B.LOC_DESC = 'E-IN SERVICE' AND
B.TRANS_DATE >= SYSDATE - 1)
【问题讨论】:
只需添加带有限制更新记录的条件的 WHERE 子句。UPDATE table SET column=value WHERE some-condition
【参考方案1】:
我认为你只需要一个相关的子查询:
UPDATE PMEQMT p
SET SERVICE_DATE_OUT = (SELECT tl.TRANS_DATE
FROM TRANSLOG tl
WHERE p.EQNO = tl.ITEMNO AND
p.CLASS = 'TL' AND
tl.LOC_DESC = 'E-OUT OF SERVICE' AND
tl.TRANS_DATE >= SYSDATE - 1
);
我认为逻辑不太正确——子查询在外部表上进行过滤,它可能返回不止一行。如果我推测,这更接近你想要的:
UPDATE PMEQMT p
SET SERVICE_DATE_OUT = (SELECT MIN(tl.TRANS_DATE)
FROM TRANSLOG tl
WHERE p.EQNO = tl.ITEMNO
tl.LOC_DESC = 'E-OUT OF SERVICE' AND
tl.TRANS_DATE >= SYSDATE - 1
)
WHERE p.CLASS = 'TL';
【讨论】:
戈登,这将是我的下一个问题。我遇到它返回不止一排。在测试较低的查询时,我收到错误:FROM keyword not found where expected 有什么想法吗?以上是关于更新查询更新所有记录 - 只希望选择记录更新的主要内容,如果未能解决你的问题,请参考以下文章