更新:我正在使用来自以下响应的查询。运行此查询时,如果找不到与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)
答案 0 :(得分:0)
我认为您只想要一个相关的子查询:
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';