ITPub博客

首页 > Linux操作系统 > Linux操作系统 > mysql 5.5 中自连接update and delete

mysql 5.5 中自连接update and delete

原创 Linux操作系统 作者:markzy5201190 时间:2012-07-11 16:59:20 0 删除 编辑
如:
Id   Role_Id   Source_Id  Soul_Num
1 2 322009 10
2 2 321009 7
3 1 322009 2
4 1 321009 0
5 3 322009 5
6 4 322009 3
获得:
Id   Role_Id   Source_Id  Soul_Num
2 3 321009 27
4 1 321009 4
5 3 321009 5
6 4 321009 3
SQL如下:

start transaction;
update altar_soul_x
inner join (select Role_Id,Source_Id,Soul_Num SoulNum from altar_soul_x where Source_Id=322009) b on a.Role_Id=b.Role_Id and a.Source_Id=321009
SET a.Soul_Num = a.Soul_Num + b.SoulNum;


delete a
from altar_soul_x a
inner join (select Role_Id,Source_Id SourceId,Soul_Num SoulNum from altar_soul_x where Source_Id=321009) b on a.Role_Id=b.Role_Id;

update altar_soul_x set Source_Id = 321009 where Source_Id = 322009;

rollback;

不适合:Version:mysql5.1 ,如下语法适合该版本:

主要注意delete / update 语法:
SQL功能:保留tbl中Level最大的值,其余剔除:
DELETE test.tbl e FROM test.tbl e
INNER JOIN (SELECT Role_Id,Pac_Level FROM(SELECT Role_Id,MAX(Pac_Level)Pac_Level FROM
test.tbl where Pac_Type=7 GROUP BY Role_Id HAVING COUNT(0)>1)a)f ON e.Role_Id = f.Role_Id
WHERE e.Pac_Type=7 AND e.Pac_Level
UPDATE DBName.thanks_tbl a
LEFT JOIN dbname.giving_tbl b ON a.RId = b.RId AND a.C_Type = b.C_Type
SET a.State = 0
where a.C_Type <> 1 and a.State =1 AND b.C_Type IS NULL;







来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26855487/viewspace-735201/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-04-05

  • 博文量
    82
  • 访问量
    454260