我在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
答案 0 :(得分: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
答案 1 :(得分: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中测试)
答案 2 :(得分:0)
其他答案是正确的,但如果您想利用Oracle,您可能需要使用分析函数。此方法只需要一次表扫描而不是两次:
select productId, maxVersion
from
(
select product.productId, version
,max(version) over (partition by productId) maxVersion
from product
)
where version = maxVersion;