有时候有些需求 要直接操作数据库,sql感觉很有意思 所以记录一下这些奇葩需求的sql 所以自己总结下
1 将一张表查出来的多个字段修改到另一张表的字段中
今天操作数据库 有个需求需要从一张流水表中有用户付款金额 还有一张 是用户的结算金额 每个用户的付款和结算费率和手续费等都不一样 需要将剩余可以结算的金额查询出来 进行更新到各自对应的用户后面 花了几分钟写出来去测试了一下 没问题
万变不离其中 依然还是 在 update +表(及其关联表) +set +更改字段 +where 条件
update merchant m join (
select pc.cp_channel channelId,0.01*sum(pc.real_pay) as totalmoney, scs.flow ,(0.01*sum(pc.real_pay))-flow as settlementmoney
from pay_record pc
right join
(select channalId,sum((money+charge)/(1-rate)) as flow from settlement where status > -1 GROUP BY channalId)
scs on scs.channalId=pc.cp_channel GROUP BY pc.cp_channel
)a on a.channelId=m.channel_id
set m.money= a.settlementmoney where a.channelId=m.channel_id
2 在游戏表games中查出的list集合下给每一列数据新增一列编号的字段(游戏表中查出热门和上线状态的随机8条数据,且给每条数据增加编号)
select (@i:=@i+1) as num,games.* from games ,(select @i:=0) as it where status=1 and is_hot=1 ORDER BY num LIMIT 8
3 周围朋友基本都问过,怎么通过一条sql去查出其所有的父id,merchant表中查出其所有的id=26的父id 和名字
SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM merchant WHERE id = _id) AS parent_id
FROM
(SELECT @r := 26) vars,
merchant h
WHERE @r <> 0) T1
JOIN merchant T2
ON T1._id = T2.id