0

我在 Oracle DB 上运行以下代码时遇到问题。不太清楚为什么 - 得到下面的错误

ORA-905 错误 - 缺少关键字

这在 MSSQL 和 MYSQL 上运行良好。

任何有关如何修复的指示将不胜感激。

SELECT product.productId, product.version
 FROM product 
INNER JOIN (SELECT productId,
                   MAX(version) AS MaxVersion
              FROM product
          GROUP BY productId) AS vTbl ON product.productId= vTbl.productId 
                                     AND product.version= vTbl.MaxVersion
4

3 回答 3

2
SELECT
  product.productId, product.version
FROM
    product JOIN
    (
            SELECT
                    productId,
                    MAX(version) AS MaxVersion
            FROM
                    product
            GROUP BY productId

   ) vTbl ON
                product.productId= vTbl.productId AND
                product.version= vTbl.MaxVersion
于 2010-10-01T13:21:33.637 回答
1

这只是为了发布查询并显示问题(Micheal 正确回答了这个问题):

AS  VTBL

需要简单

VTBL 

像这样

WITH product AS(
 SELECT 1 productId, 2 version FROM DUAL
 union
 SELECT 2 productId, 2 version FROM DUAL
 UNION
 SELECT 3 productId, 3 version FROM DUAL
 union
 SELECT 2 productId, 6 version FROM DUAL
 UNION
 SELECT 3 productId, 4 version FROM DUAL
 UNION
 SELECT 4 productId, 5 version FROM DUAL 
)
SELECT
       PRODUCT.PRODUCTID, 
   product.version
    FROM
            PRODUCT 
    INNER JOIN
            (
                    SELECT
                            productId,
                            MAX(version) AS MaxVersion
                    FROM
                            product
                    GROUP BY productId

           ) /*as*/  VTBL ON
                        product.productId= vTbl.productId AND
                        product.version= vTbl.MaxVersion;

我倾向于喜欢明确,所以我会留下 INNER JOIN ,但迈克尔的回应是正确的(因为他删除了AS

AS 抛出此错误

ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:

(在 11g r1 中测试)

于 2010-10-01T16:32:52.913 回答
0

其他答案是正确的,但如果您想利用 Oracle,您可能需要使用分析函数。这种方法只需要一次表扫描而不是两次:

select productId, maxVersion
from
(
  select product.productId, version
    ,max(version) over (partition by productId) maxVersion
  from product
)
where version = maxVersion;
于 2010-10-02T03:45:23.173 回答