0

我在一个表中有近 2000 行(“传感器”,它有 2000 多行),我需要在其中更新一列,即传感器名称。

更新中的部分替换基于另一个表 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 ...?

有什么线索吗?

4

2 回答 2

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') 
于 2013-06-18T18:39:14.863 回答
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)');
于 2013-06-18T18:15:53.290 回答