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 回答