1

要件の 1 つに対して以下の SQL を記述し、結果を取得しています。しかし、エイリアス テーブルを A として使用するのではなく、このクエリを記述するより良い方法があるかどうか疑問に思っています。

SELECT A.*,B.OPRDEFNDESC FROM 
( select OPRID_ENTERED_BY ,COUNT(*)
  from ps_req_hdr  
  where entered_dt > '01-JUL-2012'
  GROUP BY OPRID_ENTERED_BY
  ORDER BY COUNT(*) DESC) A, PSOPRDEFN B
WHERE A.OPRID_ENTERED_BY=B.OPRID
4

1 に答える 1

1

単純な INNER JOIN を使用して同じことを実行できる場合があります...

SELECT A.OPRID_ENTERED_BY, COUNT(*), B.OPRDEFNDESC
FROM ps_req_hdr A
JOIN PSOPRDEFN B ON A.OPRID_ENTERED_BY = B.OPRID
WHERE A.entered_dt > '01-JUL-2012'
GROUP BY A.OPRID_ENTERED_BY, B.OPRDEFNDESC
ORDER BY COUNT(*) DESC

ノート

以下のコメントによると、このクエリの COUNT(*) の結果には、テーブル B に対応する一致がないレコードは含まれず、テーブル B に一意でない一致がある場合は膨張します。これが意味することは次のとおりですB.OPRID。一意のフィールドでA.OPRID_ENTERED_BYはないか、外部キーではない場合B.OPRID、この回答は元のクエリと同じ結果をもたらしません。

于 2012-10-10T20:54:32.357 に答える