我有一个更新查询,应该使用另一张表中最常见的值来更新一个字段,以下是我在PostgreSQL中的操作:
UPDATE TABLE1 T1
SET COLUMN_B = (SELECT COLUMN_B
FROM
(SELECT COLUMN_A,COLUMN_B, COUNT(1) AS FREQUENCY
FROM TABLE2 T2
GROUP BY COLUMN_A,COLUMN_B
ORDER BY COLUMN_A,FREQUENCY DESC) QUERY1
WHERE QUERY1.COLUMN_A= T1.COLUMN_A
GROUP BY COLUMN_A,COLUMN_B,FREQUENCY
ORDER BY FREQUENCY DESC LIMIT 1
)
在PostgreSQL中,这个查询很好用,我想使用“rownum=1”在Oracle中进行相同的查询,但是我遇到了几个问题:
- 无法在更新的select语句中放置ORDER BY。
- 如果我决定将ORDER BY放在嵌套的select中(QUERY1),则嵌套的select无法理解对表T1的引用(
T2.COLUMN_A=T1.COLUMN_A
会出现错误,即T1.COLUMN_A不是有效标识符)。
感谢您的任何帮助或建议。
WHERE T3.COLUMN_A= T1.COLUMN_A
。看起来你不能从嵌套选择中引用表进行更新,而且我找不到没有嵌套选择的频率。 - Dany YUPDATE employee_temp SET (first_name, last_name) = (SELECT first_name, last_name FROM employees WHERE employee_id = employee_temp.employee_id)
文档: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/update_statement.htm - bpgergoSELECT MAX(CNT) FROM ( SELECT COLUMN_A,COLUMN_B, COUNT(1) AS CNT FROM TABLE2 group by COLUMN_A,COLUMN_B ) T3 WHERE T3.SITE_ID = T2.SITE_ID
如果您能在答案中编辑它,那就太好了,这样我就可以将其标记为已回答。 - Dany Y