mysql同时更新两张表6_Mysql(6) 初级使用二 两张表之间的查询与更新

1.将A表中的数据整理后放入B表中:

count() 是个聚合函数 作用是求表的所有记录数

select * from 表名 这个是查询表的所有记录

select count(*) from 表名 这个是查询表的所有记录数

insert into tableB(service_user,count) select service_user,count(service_user) from tableA group by service_user;

SELECT counter,count(counter) FROM think_qoe_service_user GROUP BY counter;

2.查询:存在一个表而不在另一个表中的记录

A,B两表,找出ID字段中,存在A表但是不存在B表的数据:

方法一:效率低

select distinct A.ID from A where A.ID not in (select ID from B);

方法二:效率中等

使用left join…on… “B.ID isnull”表示左连接之后在B.ID字段为null的记录

left join:从左表返回所有的行,即使在右表中没有匹配的行。

select A.ID from A left join B on A.ID=B.ID where B.ID isnull

方法三:(速度最快)

select * from B where (select count(1) as num from A where A.ID=B.ID ) =0

count(1):计算第一行的列数(也就是数据的记录数)

count(*):也是计算数据的记录数,会自动优化指定到哪一个字段。

具体到我自己:

存在两个表中都有相同service_user的记录

1.用 in

select service_user from A where A.service_user in ( select distinct service_user from B )

0.14s

2. 用 left join

select service_user from A left join B on A.service_user=B.service_user where B.service_user is not null

0.356s,结果比较混乱,没继续下去。

3. 内部也用where

select service_user from A where ( select count(1) from B where A.service_user=B.service_user )>0

0.401s

用一张表的数据更新另一张表(同一张表同理)

UPDATE

QQQ Q,

YYY Y

SET

Q.id=Y.id

WHERE Y.SERVICE_USER=Q.SERVICE_USER

#从一张表中取出group by后统计数据,再插入到其他表中(也可以插入到A表本身)

UPDATE bbb B, ( SELECT A.SERVICE_USER,count(*) c FROM aaa A GROUP BY A.SERVICE_USER )C SET B.USER_NUM=C.c WHERE B.SERVICE_USER=C.SERVICE_USER

#用一张表的数据更新同一张表的其他字段

UPDATE

aaa A,

(

SELECT

A.SERVICE_USER,count(*) c

FROM

aaa A #不能直接写A

GROUP BY A.SERVICE_USER

)C

SET

A.USER_NUM=C.c

WHERE

A.SERVICE_USER=C.SERVICE_USER

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值