我在表中有大约2000行(“传感器”,其中有超过2000行),我需要在其中更新一个列,即sensorname。
更新中的部分替换是基于另一个表deviceport的内容。
Deviceport通过此deviceportid列与更新表相关 - sensor.deviceportid = deviceportid。因此,每行的实际更新是不同的。我不想写2000更新语句,但我无法弄清楚我的“where”语句会说什么。
UPDATE sensor sn SET sn.sensorname = (
SELECT REGEXP_REPLACE(
sensorname,
'^P(\d)',
'J ' || (
SELECT d.deviceportlabel
FROM deviceport d
WHERE d.deviceportid = s.deviceportid
) ||
' Breaker \1'
)
FROM sensor s
WHERE REGEXP_LIKE( sensorname, '^P(\d)')
)
WHERE ...?
任何线索?
答案 0 :(得分:1)
试试这个: -
UPDATE sensor sn, deviceport d
SET sn.sensorname = REGEXP_REPLACE(
sn.sensorname,'^P(\d)', 'J '|| d.deviceportlabel||' Breaker \1')
WHERE d.deviceportid = sn.deviceportid
AND REGEXP_LIKE( sn.sensorname, '^P(\d)');
答案 1 :(得分:1)
UPDATE sensor sn
SET sn.sensorname = 'J ' ||
(
SELECT d.deviceportlabel
FROM deviceport d
WHERE d.deviceportid = sn.deviceportid
) || ' Breaker ' || substr(sn.sensorname, 2, 1)
WHERE REGEXP_LIKE( sn.sensorname, '^P\d')