update语句inner join limit 跨表按个数更新

UPDATE t_user as t1 
INNER JOIN t_employee t2 ON t2.user_id = t1.id and t2.company_id = t1.company_id
SET t1.STATUS = 20,t1.version_disable_mark = 0
where t1.version_disable_mark = 1 and t1.company_id = 111100000000 and user_type = 1
LIMIT 10


下面转转自:http://blog.csdn.net/FansUnion/article/details/52130365


项目中,评论数,关注数等数据,是实时更新的。+1,-1 这种。

有的时候,可能统计不准确。

需要写一个统计工具,更新校准下。


用Java写SQL和函数,代码很清晰,方便扩展,但是太慢了。

为了简单起见,只写sql来统计,然后更新。(不想写存储过程)

语句如下:

[sql]  view plain  copy
  1. update behavior_redman_count a  
  2. inner join  
  3. (  
  4. select memberId,count(*) as followingCount from behavior_follow where type = 10  
  5. and isDelete=0 group by memberId   
  6. )b   
  7. set a.followingCount =b.followingCount  
  8. where a.redmanId = b.memberId;  




#MySQL不支持这种语法
[sql]  view plain  copy
  1. update behavior_redman_count  
  2. set followingCount = b.followingCount  
  3. from  
  4. (  
  5. select count(*) as followingCount from behavior_follow where type = 10 and memberId = 198  
  6. and isDelete=0  
  7. )b   
  8. where redmandId = a.memberId and a.memberId= 198;  


参考资料

1. MySQL跨表更新 多表update sql语句总结

http://www.jb51.NET/article/32648.htm


2.如何将select出来的部分数据update到另一个表里面?

http://bbs.csdn.net/topics/320233666



如果更新多个字段,如何做呢?

比如:t_order表有两个字段:sale_user_id 和 sale_user_name,需要从t_customer和t_employee中获取数据。sql如下:

UPDATE t_order t3,(
select t1.user_id,t1.real_name
FROM t_employee t1 
INNER JOIN t_customer t2 on t1.id = t2.employee_id
where t2.self_company_id = 81188254143000 and t2.company_id = 82893615351000 and t2.deleted = 0
) as t4 
SET t3.sale_user_id = t4.user_id,t3.sale_user_name  = t4.real_name
where t3.id in( 82895043404000,82895085973000);


CREATE TABLE `t_customer` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `company_name` varchar(255) DEFAULT NULL COMMENT '公司名称',
  `company_abbreviate` varchar(255) DEFAULT NULL COMMENT '公司简称',
  `linkman` varchar(255) DEFAULT NULL COMMENT '联系人',
  `telephone` varchar(20) DEFAULT NULL COMMENT '手机号',
  `area_id` bigint(20) DEFAULT NULL COMMENT '区域ID',
  `detail` varchar(255) DEFAULT NULL COMMENT '详细地址',
  `purchase_goods` varchar(255) DEFAULT NULL COMMENT '采购商品',
  `employee_id` bigint(20) DEFAULT NULL COMMENT '员工ID',
  `status` int(2) DEFAULT NULL COMMENT '是否采销易用户(0:是,1:否)',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `modify_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_count` int(3) DEFAULT '0' COMMENT '更新次数,用于版本控制',
  `deleted` int(2) DEFAULT '0' COMMENT '逻辑删除标记(0:是;1:否)',
  `company_address` varchar(255) DEFAULT NULL COMMENT '客户公司地址',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  `dept_id` bigint(20) DEFAULT NULL,
  `company_id` bigint(20) DEFAULT NULL,
  `self_company_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='客户列表';


CREATE TABLE `t_employee` (
  `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '自动生成',
  `company_id` bigint(20) DEFAULT NULL COMMENT '公司表Id',
  `real_name` varchar(30) DEFAULT NULL COMMENT '员工姓名',
  `work_phone` varchar(15) DEFAULT NULL COMMENT '办公电话',
  `employee_no` varchar(30) DEFAULT NULL COMMENT '员工编号',
  `dept_id` bigint(20) DEFAULT NULL,
  `position_id` bigint(30) DEFAULT NULL COMMENT '职位id',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户表id',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `modify_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_count` int(2) DEFAULT '0' COMMENT '更新次数,用于版本控制',
  `deleted` int(2) DEFAULT '0' COMMENT '逻辑删除标记(0:是;1:否)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工管理表';

CREATE TABLE `t_order` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `num` varchar(100) DEFAULT NULL COMMENT '订单编号',
  `buy_company_id` bigint(20) DEFAULT NULL COMMENT '买方公司Id',
  `buy_company_name` varchar(255) DEFAULT NULL COMMENT '买方公司名称',
  `sale_company_id` bigint(20) DEFAULT NULL COMMENT '卖方公司Id',
  `sale_company_name` varchar(255) DEFAULT NULL COMMENT '卖方公司名称',
  `shop_id` bigint(20) DEFAULT NULL COMMENT '店铺Id',
  `status` int(4) DEFAULT NULL COMMENT '状态(10:待确认,20:交易中,30:买方取消交易,40:卖方取消交易,50:交易完成,60:退款)',
  `pay_status` int(4) DEFAULT '10' COMMENT '付款状态(10:未付过款,20:付过一部分款,30:全部付款)',
  `delivery_status` int(4) DEFAULT '10' COMMENT '发货状态(10:未发过货,20:发过一部分货,30:全部发货,40:全部收货)',
  `is_has_wait_take_delivery` int(1) DEFAULT '0' COMMENT '是否有发货',
  `is_has_refund_apply` int(1) DEFAULT '0' COMMENT '是否有退款申请',
  `is_has_refund_record` int(1) DEFAULT '0' COMMENT '是否有退款记录',
  `is_has_delivery_apply` int(1) DEFAULT '0' COMMENT '是否有发货申请',
  `amount` double(20,4) DEFAULT '0.0000' COMMENT '订单金额',
  `paid_amount` double(20,4) DEFAULT '0.0000' COMMENT '已付金额',
  `real_pay_amount` double(20,4) DEFAULT '0.0000' COMMENT '实际支付金额',
  `pay_type` varchar(50) DEFAULT NULL COMMENT '付款方式(线上支付:10;线下支付:20)',
  `pay_count` int(11) DEFAULT NULL COMMENT '付款次数(一次:1:多次:2)',
  `delivery_type` varchar(50) DEFAULT NULL COMMENT '发货方式(卖家发货:10;买家自提:20)',
  `delivery_count` int(11) DEFAULT NULL COMMENT '发货次数(一次:1:多次:2)',
  `buy_company_message` text COMMENT '买家留言',
  `order_goods_name` varchar(1000) DEFAULT NULL COMMENT '订单商品名称(筛查时备用字段)',
  `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建人Id',
  `create_user_name` varchar(255) DEFAULT NULL COMMENT '创建人名称',
  `charge_person_id` bigint(20) DEFAULT NULL COMMENT '负责人id',
  `charge_person_name` varchar(100) DEFAULT NULL COMMENT '负责人姓名',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
  `update_count` int(3) DEFAULT '0' COMMENT '更新次数,用于版本控制',
  `deleted` int(2) DEFAULT '0' COMMENT '逻辑删除标记(0:是;1:否)',
  `order_type` int(1) DEFAULT '1' COMMENT '订单类型(1:普通,2:团购)',
  `buy_user_id` bigint(20) DEFAULT NULL COMMENT '采购负责人',
  `buy_user_name` varchar(100) DEFAULT NULL COMMENT '采购负责人姓名',
  `sale_user_id` bigint(20) DEFAULT NULL COMMENT '销售负责人',
  `sale_user_name` varchar(100) DEFAULT NULL COMMENT '销售负责人姓名',
  `receive_city_names` varchar(255) DEFAULT NULL COMMENT '收货地址',
  `approval_user_name` varchar(255) DEFAULT NULL COMMENT '审核人',
  `approval_user_id` bigint(20) DEFAULT NULL COMMENT '审核人ID',
  `order_invoiced_status` int(4) DEFAULT '10' COMMENT '订单开票状态',
  `already_invoiced_amount` double(20,4) DEFAULT '0.0000' COMMENT '订单开票金额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表';





你可能感兴趣的:(mysql)