2010-10-01 135 views
0

我在Oracle數據庫上運行以下代碼時遇到問題。也不太清楚爲什麼 - 讓下面ORA-00905:將Mysql/MMSQL語法轉換爲oracle語法時遇到問題

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 

回答

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

這只是張貼查詢,並顯示問題(邁克爾正確回答這一個):在

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中)

0

其他答案是正確的,但如果您想利用Oracle,您可能需要使用分析函數。此方法只需要一次表格掃描而不是兩次:

select productId, maxVersion 
from 
(
    select product.productId, version 
    ,max(version) over (partition by productId) maxVersion 
    from product 
) 
where version = maxVersion;