【发布时间】:2020-09-08 11:47:42
【问题描述】:
我有两张如下表。
产品表:
+-----+------------+-----+-------+--------+
| id | activityId | age | queue | status |
+-----+------------+-----+-------+--------+
| 100 | 2 | 0 | start | 2 |
| 101 | 3 | 0 | in | 5 |
+-----+------------+-----+-------+--------+
部门表:
+-----+------------+-------+----------+
| id | activityId | queue | exittime |
+-----+------------+-------+----------+
| 100 | 1 | new | null |
| 100 | 2 | start | null |
| 100 | 2 | start | null |
| 101 | 1 | new | null |
| 101 | 1 | new | null |
| 101 | 3 | in | null |
| 101 | 3 | in | null |
+-----+------------+-------+----------+
我正在尝试使用以下查询更新产品表 age 列。但其返回错误为 ORA-01427 单行子查询返回多于一行。
update Product pd set pd.age = (select (case when dp.exittime!= null then
(sysdate - dp.exittime)
else ( case when pd.queue = dp.queue
then (select (sysdate - dp1.entrytime) from department dp1 where pd.id = dp1.id
) else 2 END) END)
from department dp
where dp.id > 1
AND pd.id = dp.id
AND pd.status in('1','7','2','5')
AND pd.queue= dp.queue
AND pd.activityId = dp.activityId )
where exists
(select 1 from department dp
where dp.id > 1
AND pd.id = dp.id
AND pd.status in('1','7','2','5')
AND pd.queue= dp.queue
AND pd.activityId = dp.activityId );
由于部门表中的 activityId,子查询返回多个值。如何避免子查询返回多个值。
【问题讨论】:
-
错误的哪一部分你不明白?似乎很清楚。如何修复它取决于您的数据和您想要做什么。
-
我想用给定的条件更新Product表中对应Id的age字段
-
如果你运行你的子查询,你会看到它(至少有时)返回不止一行。要么解决数据问题(如果有的话),那么您总是会返回一行,或者添加逻辑来确定如何处理多行(平均这些值,对它们求和,取第一个/最后一个或最小值/最大值等)?