ric*_*oke 1 sql oracle subquery query-optimization ora-00904
在Oracle查询中是否有任何方法可以在其外部的子查询中引用列,或者即使通过不同的方式实现该效果?到目前为止,我在网上看到的所有东西都没有帮助.
例如(这是我想要的事情):
SELECT a.product_code, b.received, b.issued
FROM productinfo a,
(SELECT SUM(qty_received) AS received, SUM(qty_issued) AS issued
FROM productdetail b WHERE b.product_code = a.product_code AND active = 1);
Run Code Online (Sandbox Code Playgroud)
我已经尝试了大量不同的变体/组合当我得到像ORA-00904这样的错误:与WHERE子句关系有关的无效标识符.
目前,如果我作为单独的查询运行,例如:
SELECT product_code FROM productinfo;
Run Code Online (Sandbox Code Playgroud)
然后为每个记录:
SELECT SUM(qty_received) AS received, SUM(qty_issued) AS issued FROM productdetail
WHERE product_code = '(specified)' AND active = 1;
Run Code Online (Sandbox Code Playgroud)
这可能需要半个多小时来运行8000个记录,这只是简单的愚蠢.
用完头发,任何帮助赞赏!! 谢谢.
ORA错误是因为您无法关联派生表/内联视图 - 您需要使用JOIN表示法(ANSI-89或92).
假设您确实需要PRODUCTINFO表中的列,请使用:
SELECT a.product_code, b.received, b.issued
FROM PRODUCTINFO a
JOIN (SELECT t.product_code,
SUM(t.qty_received) AS received,
SUM(t.qty_issued) AS issued
FROM PRODUCTDETAIL t
WHERE t.active = 1
GROUP BY t.produce_code) b ON b.product_code = a.product_code
Run Code Online (Sandbox Code Playgroud)
如果要查看productinfo记录列表(可能有也可能没有PRODUCTDETAIL记录),请使用:
SELECT a.product_code, b.received, b.issued
FROM PRODUCTINFO a
LEFT JOIN (SELECT t.product_code,
SUM(t.qty_received) AS received,
SUM(t.qty_issued) AS issued
FROM PRODUCTDETAIL t
WHERE t.active = 1
GROUP BY t.produce_code) b ON b.product_code = a.product_code
Run Code Online (Sandbox Code Playgroud)
但是示例看起来您可能只需要使用:
SELECT t.product_code,
SUM(t.qty_received) AS received,
SUM(t.qty_issued) AS issued
FROM PRODUCTDETAIL t
WHERE t.active = 1
GROUP BY t.produce_code
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |