【发布时间】:2018-12-23 12:38:17
【问题描述】:
我正在创建一个程序,目的是返回满足一组条件的第一条记录。
CREATE OR REPLACE VIEW V_ACCOUNTS AS
SELECT
A.ID,
A.BALANCE,
A.PRODUCTCODE,
(SELECT COUNT(*) FROM ACCOUNTS A2 WHERE A.CUSTOMERID=A2.CUSTOMERID) CUSTOMER_NUM_ACCOUNTS
FROM ACCOUNTS A
例如
SELECT * FROM V_ACCOUNTS WHERE ROWNUM = 1 AND PRODUCTID = 467 AND CUSTOMER_NUM_ACCOUNTS > 2
这是否可以增强上述查询,从而避免在同一张表上进行自联接?我可以在条件下使用分析吗? 性能是一个问题,我想尽可能优化查询。
【问题讨论】:
-
是什么让一行“第一”?你知道表没有顺序,没有 ORDER BY 的 rownums 是任意的吗? PS请给一个[mce]。此外,如果您知道 productid,那么您应该将它放在您计算的同一查询中,这样 DBMS 就不必计算其他 productid 的行数。仅此一项就应该允许优化器消除这种自联接的任何实现工作。
标签: sql oracle oracle12c self-join