SQLステートメントを最適化してクエリを使用しますが、何らかの形でサブクエリーの外で列を参照する必要があります

StackOverflow https://stackoverflow.com/questions/4866948

質問

SQLクエリ内の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);

ORA-00904のようなエラーが発生した瞬間に、さまざまなバリエーション/組み合わせを試しました。WhereClause関係に関連する無効な識別子。

現在、私が別のクエリとして実行する場合、例:

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;

これには30分以上かかり、8000のレコードを実行することができます。

髪の毛が足りなく、あらゆる助けに感謝します!!ありがとうございました。

役に立ちましたか?

解決

ORAエラーは、派生テーブル/インラインビューを相関させることができないためです - 参加表記(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

ProductDetail Recordsを持っている場合とない場合がある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

他のヒント

クエリ内でグループ化するだけで、内側の結合を使用します

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top