2017-04-07 62 views
1

我試圖建立一個查詢來選擇相關係數爲用戶確定最受好評的電影我在做什麼錯在甲骨文SqlDevelopper此相關查詢

我的表的結構是這樣的:

enter image description here

我的查詢是這樣的:

SELECT 
    user1, user2, 
    ((psum - (sum1 * sum2/n))/sqrt((sum1sq - pow(sum1, 2.0)/n) * (sum2sq - pow(sum2, 2.0)/n))) AS r, 
    n 
FROM 
    (SELECT 
     n1.idclient AS user1, 
     n2.idclient AS user2, 
     SUM(n1.cote) AS sum1, 
     SUM(n2.cote) AS sum2, 
     SUM(n1.cote * n1.cote) AS sum1sq, 
     SUM(n2.cote * n2.cote) AS sum2sq, 
     SUM(n1.cote * n2.cote) AS psum, 
     COUNT(*) AS n 
    FROM 
     cote AS n1 // <---------- Editor is pointing a missing parenthese here with a red line 
    LEFT JOIN 
     cote AS n2 ON n1.idfilm = n2.idfilm 
    WHERE 
     n1.idclient > n2.idclient 
    GROUP BY 
     n1.idclient, n2.idclient) AS step1 
ORDER BY 
    r DESC, n DESC 

但我相信,我不會錯過任何一個括號,我做了什麼W¯¯榮?

P.S:我不是專家,我想明白

回答

2

Oracle不會讓你使用AS對錶的別名,只爲列別名。 The select-list syntax顯示可選的AS; the table-reference syntax沒有。

在線路你突出

FROM cote AS n1 

AS被視爲表別名(雖然它是一個保留字,所以你不能使用它的一個別名);那麼它看到n1並不知道它的意思。解析器似乎往往回落至猜測,任何打開的括號中應該已經關閉,馬上在這種情況下n1令牌之前,因爲這可能已經完成了它迄今(我非常簡化,當然)分析;因此不完全有用的錯誤消息。

所以,你需要刪除所有三個地方AS你使用它:

SELECT 
     user1, user2, 
     ((psum - (sum1 * sum2/n))/sqrt((sum1sq - pow(sum1, 2.0)/n) * (sum2sq - pow(sum2, 2.0)/n))) AS r, 
     n 
FROM 
     (SELECT 
       n1.idclient AS user1, 
       n2.idclient AS user2, 
       SUM(n1.cote) AS sum1, 
       SUM(n2.cote) AS sum2, 
       SUM(n1.cote * n1.cote) AS sum1sq, 
       SUM(n2.cote * n2.cote) AS sum2sq, 
       SUM(n1.cote * n2.cote) AS psum, 
       COUNT(*) AS n 
     FROM 
       cote n1 
    LEFT JOIN 
     cote n2 
    ON 
     n1.idfilm = n2.idfilm 
     WHERE 
       n1.idclient > n2.idclient 
    GROUP BY 
     n1.idclient, n2.idclient) step1 
ORDER BY 
     r DESC, 
     n DESC 
+0

「甲骨文不會讓你用作表別名,僅列別名在你行突出「哦,我的上帝,現在我明白爲什麼有時我可以使用AS有時我不能,但奇怪的是在一些其他Oracle編輯它接受它,......甲骨文是一個很大的世界,我非常感謝你多爲你的時間就向我解釋 – napi15

+1

即使你其他的編輯器沒有突出的問題,你會當您運行的查詢得到了相同的ORA-00907錯誤。 –

+0

是的,你是對的,因爲當我運行查詢時,它不能識別「POW」,而是識別POWER。我從不明白爲什麼Oracle不喜歡統一,並且在所有版本中都使用相同的語法。這並不難,但是它混淆了我 – napi15