【发布时间】:2021-06-10 05:19:16
【问题描述】:
首先,我知道 Stack Overflow 中存在一个常见问题,但以下解决方案在这里效果不佳。所以我仍然需要一些帮助。
Oracle - Update COUNT of rows with specific value
Oracle - Update rows with a min value in the group of a column from another table
Oracle update statement with group function
Oracle - Update COUNT of rows with specific value
问题是:我有一个 +700k 行表:
REVIEWS (PRODUCT_ID, REVIEW, REVIEW_DATE, RELEASE_DATE, ..., REVIEW_COUNT)
我正在尝试通过计算具有相同 PRODUCT_ID 的行来更新 REVIEW_COUNT(我只想在产品发布之前进行评论)。所以下面的代码非常适合我的目的:
SELECT COUNT(PRODUCT_ID) FROM REVIEWS
WHERE REVIEW_DATE < RELEASE_DATE
GROUP BY PRODUCT_ID
但我很难进行更新。首先我尝试了这个:
UPDATE REVIEWS R
SET R.REVIEWS_COUNT =
(SELECT COUNT(RR.PRODUCT_ID) FROM REVIEWS RR
WHERE RR.DATA < RR.REL_DATE
GROUP BY RR.PRODUCT_ID)
错误是“多于一行”,这并不奇怪,但由于我使用的是 group by 语句,所以它不应该发生。所以我尝试了自加入:
UPDATE REVIEWS R
SET R.REVIEWS_COUNT =
(SELECT COUNT(RR.PRODUCT_ID) FROM REVIEWS RR
WHERE RR.PRODUCT_ID = R.PRODUCT_ID AND RR.DATA < RR.REL_DATE)
但是查询需要很长时间,我认为这不应该花这么长时间,简单的选择非常正常 - 快速。 我还测试了一些更花哨、更简单的东西,但结果还是一样:等待了很长时间,而且似乎是错误的。 请问,我在如此简单的更新中缺少什么?
【问题讨论】:
标签: oracle sql-update