我需要从另一个表列的MAX值更新表列的值。
这个question正是我的情况,我有一个表,我需要从中获取MAX值,然后更新表newTable的datetime列,该表的MAX datetime值为所有匹配的home值newtable的。
根据链接线程的数据,我提出了以下更新声明
UPDATE newTable s
SET s.datetime = (
SELECT tt.timedate
FROM topten tt
INNER JOIN
(SELECT home, MAX(datetime) AS MaxDateTime
FROM topten
GROUP BY home) groupedtt
ON tt.home = groupedtt.home
AND tt.datetime = groupedtt.MaxDateTime WHERE s.home = tt.home);
这个问题是我收到以下错误
SQL Error: ORA-01427: single-row subquery returns more than one row
我还应该指出topten.home并不是唯一的,而newTable.home是。
我可以通过添加如下的rownum语句来消除错误:
UPDATE newTable s
SET s.datetime = (
SELECT tt.timedate
FROM topten tt
INNER JOIN
(SELECT home, MAX(datetime) AS MaxDateTime
FROM topten
GROUP BY home) groupedtt
ON tt.home = groupedtt.home
AND tt.datetime = groupedtt.MaxDateTime WHERE s.home = tt.home AND rownum <= 1);
或设置MAX
的子查询UPDATE newTable s
SET s.datetime = (
SELECT MAX(tt.timedate)
FROM topten tt
INNER JOIN
(SELECT home, MAX(datetime) AS MaxDateTime
FROM topten
GROUP BY home) groupedtt
ON tt.home = groupedtt.home
AND tt.datetime = groupedtt.MaxDateTime WHERE s.home = tt.home);
但是我不太明白为什么需要这样做,因为原始子查询中的MAX语句应该确保每个家庭只有1个条目,我也不知道这些变化的影响究竟是什么(虽然初步测试表明它们是似乎工作)
我过度复杂吗?
答案 0 :(得分:3)
为什么不简单......
UPDATE newTable s
SET s.datetime = (
SELECT COALESCE(MAX(tt.timedate), <put your default date here>)
FROM topten tt
WHERE s.home = tt.home)
如果我接受你的原始陈述,我删除了内连接,如下所示:
UPDATE newTable s
SET s.datetime = (
SELECT tt.timedate
FROM topten tt
WHERE s.home = tt.home);
...您将看到子查询可以为相同的home
值返回多行。因此,我们假设上面的每个home
值返回5行,然后使用MAX
和GROUP BY
查询添加内部联接,该查询确实每home
返回一行,它仍然会返回总共5 x 1
行。它不会神奇地将行数减少到1
。