2016-12-01 62 views
0

以下thread已成功展示瞭如何一起使用UPDATE SET和FROM子句,以使用從不同表格導出的值更新特定列的整個行。Oracle SQL:從PostgreSQL執行下列表達式的等效方法?

當用Oracle SQL執行下面的表達式:

UPDATE territory2_t 
    SET total_sales_person = t.total_count 
FROM (
    SELECT salesterritoryid, count(*) as total_count 
    FROM salesperson_t 
    group by salesterritoryid 
) t 
WHERE territoryid = t.salesterritoryid; 

甲骨文指出:SQL錯誤:ORA-00933:SQL命令不能正確地結束

+0

在Oracle中看看[merge](http://docs.oracle.com/database/121/SQLRF/statements_9016.htm#SQLRF01606) – Aleksej

回答

3

在Oracle中,你可以使用merge做的工作:

merge into territory2_t 
using (
     SELECT salesterritoryid, count(*) as total_count 
     FROM salesperson_t 
     group by salesterritoryid 
    ) t 
on (territoryid = t.salesterritoryid) 
when matched then 
    update SET total_sales_person = t.total_count 
3

這可以使用MERGE(在Oracle和大多數其他DB系統中 - 那些實現MERGE狀態來自SQL標準)。在大多數情況下,MERGE是首選解決方案。

有一種誤解,認爲這不能通過Oracle中的UPDATE聲明完成。我在下面展示它如何可以完成 - 不鼓勵它的使用(MERGE更好),但要表明UPDATE也可以使用。這是OP在原始文章中請求的Postgre SQL的轉換。

update (select t2.total_sales_person, t.total_count 
      from territory2_t t2 inner join 
       (select salesterritoryid, count(*) as total_count 
        from salesperson_t 
        group by salesterritoryid 
       ) t 
       on t2.territoryid = t.salesterritoryid 
     ) 
set total_sales_person = total_count;