【发布时间】:2014-06-15 19:29:31
【问题描述】:
我编写了一个查询,在该查询中从总体中过滤掉记录,其中嵌套查询中的 2 个字段的值等于表中的 2 个对应字段。我正在尝试使用 2 个关键字段的串联作为查找。
虽然这确实让我得到了我正在寻找的结果,但这种方法似乎效率很低,因为查询需要大约 60 秒才能返回结果(CRM.ASSET_PLUS 表有超过 10M 的记录)。假设我无法过滤掉任何内容,并且没有在 CRM.ASSET_PLUS 中创建自定义字段,并且这两个字段已经连接。
有没有更好的方法可以做到这一点?
SELECT DISTINCT A.ACCOUNT_NUMBER
FROM (SELECT C.ACCOUNT_NUMBER,
A.LOCATION_ACCOUNT_ID || A.PRODUCT_ID AS LOOKUP
FROM CRM.ASSET_PLUS A,
CRM.PROD_INT B,
CRM.ACCOUNT C,
CRM.ACCOUNT D
WHERE A.PRODUCT_ID = B.ROW_ID
AND A.LOCATION_ACCOUNT_ID = C.ACCOUNT_ID
AND C.PARENT_ID = D.ACCOUNT_ID
AND D.ACCOUNT_NUMBER = '00750333'
) A
LEFT JOIN (SELECT A.LOCATION_ACCT_ID || A.PRODUCT_ID AS LOOKUP
FROM ORDER_FORM_PRODUCTS A
WHERE A.AGREEMENT_NUM = '00750333_JUN2014'
) B
ON A.LOOKUP = B.LOOKUP
WHERE B.LOOKUP IS NULL;
【问题讨论】:
-
LEFT JOIN(SELECT ...) B WHERE B.xxx IS NULL等同于NOT EXISTS(...)
标签: sql oracle query-optimization