我的一位开发人员同事要求我为他优化语句。我对当前级别的 SQL 技术和功能进行了简要介绍,并且感觉特别是窗口函数可以帮助我。
有问题的查询目前是这样的:
SELECT
T1.FIELD1,
T1.FIELD2
...
(SELECT COUNT (T2.FIELD1) FROM OUTER_TABLE_NAME T2 WHERE T2.FOREIGN_KEY = T1.PRIMARY_KEY) AS COMMENTS
FROM T1
;
这迫使数据库对主表 T1 中的每条记录运行子查询,这通常很慢。更好的方法是如果有一个可以表达相同的窗口函数。但是,它不能与主表 T1 中的记录相乘。
我想过这样的事情:
SELECT
T1.FIELD1,
T2.FIELD2
...
COUNT(T2.FOREIGN_KEY) OVER (PARTITION BY T2.FOREIGN_KEY)
FROM T1
LEFT OUTER JOIN T2 ON T2.FOREIGN_KEY = T1.KEY
;
它必须是 OUTER JOIN 才能不过滤主表 T1 中的记录。但是,这种方式将把主表 T1 中的记录与辅助表 T2 中的每个匹配记录相乘。
有没有办法在 Oracle 12.2 中使用窗口函数或任何其他非专有方法来表达 count()?
1 个回答