2017-08-15 392 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