2011-02-01 102 views
1

在SQL查询中,Oracle中是否有任何方式来引用来自其外部的子查询中的列,或者即使通过不同的手段?到目前为止,我在网上阅读的所有内容都没有帮助。优化SQL语句以使用查询,但需要以某种方式在子查询外部引用列

例如(这是后我之类的话):与无效的:不同的变化

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); 

我试着加载/ combinationsAt的那一刻我就得到这样的ORA-00904错误到WHERE子句的关系。

目前我办作为单独的查询,如:

SELECT product_code FROM productinfo; 

,然后每个这样的记录:

SELECT SUM(qty_received) AS received, SUM(qty_issued) AS issued FROM productdetail 
WHERE product_code = '(specified)' AND active = 1; 

这可以接管一个半小时为8000条记录运行这简直是​​愚蠢的。

用完头发,任何帮助赞赏!谢谢。

回答

6

的ORA错误是因为你不能派生表/内嵌视图相关组 - 你需要使用JOIN符号(ANSI-89或92)。

假设你真的从PRODUCTINFO表,使用需要的列(S):

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 

如果你想看到的productinfo记录,这可能会或可能不会有产品详情记录列表,使用:

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 

但这个例子看起来你可能只需要使用:

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 
+0

大塔恩你大家发布 - 问题解决了,现在只需不到一分钟! :D真棒,非常感谢你的帮助大家。 – richhallstoke 2011-02-02 17:37:24

0

只需通过查询中,并使用内部联接

SELECT a.product_code, b.received, b.issued 
FROM productinfo a 
INNER JOIN 
(SELECT product_code, SUM(qty_received) AS received, SUM(qty_issued) AS issued 
    FROM productdetail 
    WHERE active = 1 
    GROUP BY product_code) b on b.product_code = a.product_code