2017-05-30 20 views
0

Oracle用のこのSQLコードで何が問題なのかわかりません。サブクエリに基づいてデータベースを更新しようとしています。SQL Missing Select文 - Oracleの更新

with T as 
(SELECT "Folder Name", SUM("Session Length") as "Folder Length" 
FROM "SESSIONUSAGE" 
GROUP BY "Folder Name") 
UPDATE FolderUsage SET ("Folder Length") = 
(SELECT "Folder Length" FROM T 
    WHERE (FolderUsage."Folder Name" = T."Folder Name") 

私はデータベースをどのように見つけたかのようにスペースが必要でした。ご協力いただきありがとうございます!

with T as (
     SELECT "Folder Name", SUM("Session Length") as "Folder Length" 
     FROM "SESSIONUSAGE" 
     GROUP BY "Folder Name" 
    ) 
UPDATE FolderUsage 
    SET "Folder Length" = (SELECT "Folder Length" 
          FROM T 
          WHERE FolderUsage."Folder Name" = T."Folder Name" 
         ); 

をしかし、Oracleはまだこれを受け入れることはありません。

+0

をそして、あなたはクエリを実行すると何が起こる:

ただし、この場合には、あなたはMERGE文でより良い行うことができますか? –

+0

最後に「)」がありませんが、すべてのフォルダの長さが更新されます – maSTAShuFu

答えて

0

一つには、あなたの括弧はバランスしていません。代わりに、代わりに:

UPDATE FolderUsage 
    SET "Folder Length" = (SELECT SUM(su."Session Length") 
          FROM "SESSIONUSAGE" su 
          WHERE FolderUsage."Folder Name" = su."Folder Name" 
         ); 

とにかくこれはもっと簡単だと思います。

2

適切な構文はWITH句は、それがサブクエリとなっているSELECT文で所属

update FolderUsage 
    set "Folder Length" = 
    ( 
     with T as (<aggregate SELECT statement defining T goes here>) 
     select "Folder Length" from T where ........ 
    ) 

です。 WITH句はUPDATE句を上回らない!

merge into FolderUsage F 
    using (<aggregate SELECT statement defining T goes here>) T 
    on (F."Folder Name" = T."Folder Name") 
when matched then update set "Folder Length" = T."Folder Length"