代码拉取完成,页面将自动刷新
情景:把同时存在与取经四人组和悟空兄弟表中记录的人在取经四人组表中的over字段更新为“齐天大圣”
UPDATE user1 a JOIN
(SELECT b.user_name FROM user1 a JOIN user2 b ON a.user_name = b.user_name) c
ON a.user_name = c.user_name
SET a.over='齐天大圣';
因为用到了子查询,效率低效率
select a.user_name,a.over,(select over from user2 b where a.user_name = b.user_name) as over2 from user1 a;
jion优化后
select a.user_name,a.over,b.over as over2 from user1 a left join user2 b on a.user_name = b.user_name;
情景:如何查询出四人组中打怪最多的日期?
select a.user_name,b.killday,b.kills from user1 a join user_kills b on a.id = b.user_id
where b.kills = (select max(c.kills) from user_kills c where c.user_id = b.user_id);
jion优化后
select a.user_name,b.killday,b.kills from user1 a
join user_kills b on a.id = b.user_id
join user_kills c on b.user_id = c.user_id
group by a.user_name,b.killday,b.kills having b.kills = max(c.kills);
每个人杀怪最多的前两天
select a.user_name,b.killday,b.kills from user1 a
join user_kills b on a.id = b.user_id
where user_name ='孙悟空'
order by b.kills desc limit 2;
select a.user_name,b.killday,b.kills from user1 a
join user_kills b on a.id = b.user_id
where user_name ='猪八戒'
order by b.kills desc limit 2;
select a.user_name,b.killday,b.kills from user1 a
join user_kills b on a.id = b.user_id
where user_name ='沙僧'
order by b.kills desc limit 2;
问题:
优化方式一 (mysql不支持)
with tmp as
(select a.user_name,b.killday,b.kills,row_number() over
(partition by a.user_name order by b.kills) cnt
from user1 a join user_kills b on a.id = b.user_id)
select * from tmp where cnt <=2;
优化方式二
select d.user_name,c.killday,kills
from (select user_id,killday,kills,
(select count(*) from user_kills b where b.user_id = a.user_id and a.kills <= b.kills) as cnt
from user_kills a group by user_id,killday,kills ) c
join user1 d on c.user_id = d.id
where cnt <= 2;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。