"Single-row subquery returns more than one row" 在 Update 语句中
"Single-row subquery returns more than one row" in Update statement
为了弄清楚如何让我的 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
列更新为 activity
table 中的最低 entry_timestamp
值,其中 activity.caseid=tbl_metrics.caseid
和 activity.entry_timestamp>tbl_metrics.act_start_time
activity.act_id
是 100、700 或 300。
我觉得应该是这样的:
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)
为了弄清楚如何让我的 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
列更新为 activity
table 中的最低 entry_timestamp
值,其中 activity.caseid=tbl_metrics.caseid
和 activity.entry_timestamp>tbl_metrics.act_start_time
activity.act_id
是 100、700 或 300。
我觉得应该是这样的:
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)