2017-08-15 394 views
0

我一直在努力研究几天,以了解如何使我的update语句正常工作。 select语句似乎按预期工作,但是当我尝试更新列值时,出现ORA-01427 single-row subquery returns more than one row错误。更新语句中的“单行子查询返回多个行”

下面的代码:

UPDATE tbl_metrics 
SET act_end_time = (WITH base 
AS (SELECT caseid, entry_timestamp 
     FROM activity 
     WHERE act_id IN (100, 700, 300) 
    ) 
SELECT t1.entry_timestamp 
FROM base t1, tbl_metrics t2 
WHERE t1.caseid = t2.caseid 
AND t2.act_start_time < (SELECT MIN(t1.entry_timestamp) FROM base t1 WHERE t1.caseid = t2.caseid)) 

的想法是,在tbl_metrics.act_end_time列与最低entry_timestamp值从activity表,其中activity.caseid=tbl_metrics.caseidactivity.entry_timestamp>tbl_metrics.act_start_timeactivity.act_id是100,700,或300

+0

可能要从哪里开始在更新 – Patrick

+0

@帕特里克你可以请更具体吗?我一直在这个充满了这么久,我完全失去了。 – Slingy

回答

1
更新

我认为它应该是这样的:

UPDATE tbl_metrics t2 
SET act_end_time = 
    (SELECT MIN(t1.entry_timestamp) 
    FROM activity t1 
    WHERE act_id IN (100, 700, 300) 
     AND t1.entry_timestamp > t2.act_start_time 
     AND t1.caseid = t2.caseid) 
+0

很好,谢谢。很好很简单。性能比我想象的要好,不需要'with'部分就可以不必去'activity'表来获取'act_id'的集合 – Slingy