2016-12-01 59 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;