1

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: 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 レコードを実行するのに 30 分以上かかることがあります。

髪が不足しています、どんな助けでも大歓迎です!! ありがとうございました。

4

2 に答える 2

6

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

PRODUCTDETAIL レコードがある場合とない場合がある 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
于 2011-02-01T19:28:44.780 に答える
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
于 2011-02-01T19:18:21.407 に答える