代码之家  ›  专栏  ›  技术社区  ›  Stewie

用带有where子句的“Select查询”更新表

  •  5
  • Stewie  · 技术社区  · 14 年前

    我想实现以下目标:

    表的当前状态(我的表)

     id        totalX          totalY          totalZ               
     --------- --------------  --------------  --------------       
             9             34              334             0      
            10              6               56             0      
            11             21              251             0      
            12              3               93             0   
    

    select id,count(*) as total FROM my_table2 WHERE column_2 = 1 GROUP BY id
    
     id        total               
     --------- --------------       
             9            500      
            10            600      
            11            700      
            12            800  
    

    表的预期状态(my\u表)

     id        totalX          totalY          totalZ               
     --------- --------------  --------------  --------------       
             9             34              334             500      
            10              6               56             600      
            11             21              251             700      
            12              3               93             800    
    

    这可以在一个更新查询中完成吗?我正在寻找RHEL 5.0上的Sybase ASE 12.5

    编辑: 我找不到Sybase的解决方案,但这个问题的当前答案适用于MS SQL Server。。

    3 回复  |  直到 12 年前
        1
  •  10
  •   Conrad Frix    14 年前
       update 
              my_table 
       set 
          my_table.totalZ = t.total 
       FROM
        my_table mt
        INNER JOIN 
           (select id,count(*) as total 
           FROM my_table2 
          WHERE column_2 = 1 GROUP BY id) t
       on mt.id  = t.id
    

    更新

        2
  •  2
  •   fastcodejava    10 年前

    像这样的东西应该能奏效

    update my_table
    set my_table.totalZ = (select count(*) from my_table2 where my_table.id = my_table2.id and my_table2.column_2 = 1);
    
        4
  •  0
  •   Olivier Citeau    4 年前

    最好、更可靠的方法是使用MERGE。

    MERGE INTO my_table
    USING (select id,count(*) as total FROM my_table2 WHERE column_2 = 1 GROUP BY id) t2
    ON (my_table.id=t2.id)
    WHEN MATCHED THEN
    UPDATE SET totalZ = t2.total
    

    http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36272.1572/html/commands/commands89.htm