update 如何实现限制更新条数,

Up_Front 2018-02-07 05:56:22
UPDATE A1
INNER JOIN B ON B.pc_price_type = '1'
AND A1.fc_product_name = B.pc_product_name
AND A1.fc_pf_name = B.pc_pf_name
AND A1.fc_pay_time >= B.pc_begin_date
AND A1.fc_pay_time <= B.pc_end_date
SET fc_supply_price = B.pc_supply_price,
fc_price_type = B.pc_price_type,
fc_su_name = B.pc_su_name,
fc_begin_date = B.pc_begin_date,
fc_end_date = B.pc_end_date
WHERE
id IN (
SELECT
*
FROM
A2
INNER JOIN B AS p ON B.pc_price_type = '1'
AND t1.fc_product_name = B.pc_product_name
AND t1.fc_pf_name = B.pc_pf_name
AND t1.fc_pay_time >= B.pc_begin_date
AND t1.fc_pay_time <= B.pc_end_date
WHERE A1.fc_product_name = A2.pc_product_name
AND A1.fc_pf_name = A2.pc_pf_name
AND A1.fc_pay_time >= B.pc_begin_date
AND A1.fc_pay_time <= B.pc_end_date
LIMIT 0,
B.`pc_effective_quantity`
)




如过A表中有这么多条数据 1,1,1,2,2,2,3,3,3 ,我想更新为 1 的前两条,2的前一条,3的全部更新
...全文
1644 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Up_Front 2018-02-27
  • 打赏
  • 举报
回复
已经解决谢谢各位!
中国风 2018-02-09
  • 打赏
  • 举报
回复
看你的语句可用游标去处理赋值,用动态T-SQL去执行更新
zjcxc 2018-02-09
  • 打赏
  • 举报
回复
如果只是简单限制条数,那么直接用 limit 如果是根据不同的情况限制,那么先把满足条件的主键+排序条件弄出来,然后做一个筛选,最终根据筛选后的主键做关联更新 这个是比较通用的做法,针对具体的情况,还可以考虑看是否在更新条件里面可以直接做到只出来满足条件的数据
Up_Front 2018-02-09
  • 打赏
  • 举报
回复
UPDATE `fc_generation_bill_detail` INNER JOIN `pc_generation_price_info` ON `pc_generation_price_info`.pc_price_type = '1' AND `fc_generation_bill_detail`.fc_product_name = `pc_generation_price_info`.pc_product_name AND `fc_generation_bill_detail`.fc_pf_name = `pc_generation_price_info`.pc_pf_name AND `fc_generation_bill_detail`.fc_pay_time >= `pc_generation_price_info`.pc_begin_date AND `fc_generation_bill_detail`.fc_pay_time <= `pc_generation_price_info`.pc_end_date SET fc_supply_price = `pc_generation_price_info`.pc_supply_price, fc_price_type = `pc_generation_price_info`.pc_price_type, fc_su_name = `pc_generation_price_info`.pc_su_name, fc_begin_date = `pc_generation_price_info`.pc_begin_date, fc_end_date = `pc_generation_price_info`.pc_end_date WHERE id IN ( SELECT temp.id from ( SELECT t1.id FROM `fc_generation_bill_detail` AS t1 INNER JOIN `pc_generation_price_info` AS p ON p.pc_price_type = '1' AND t1.fc_product_name = p.pc_product_name AND t1.fc_pf_name = p.pc_pf_name AND t1.fc_pay_time >= p.pc_begin_date AND t1.fc_pay_time <= p.pc_end_date WHERE `fc_generation_bill_detail`.fc_product_name = t1.pc_product_name AND `fc_generation_bill_detail`.fc_pf_name = t1.pc_pf_name AND `fc_generation_bill_detail`.fc_pay_time >= p.pc_begin_date AND `fc_generation_bill_detail`.fc_pay_time <= p.pc_end_date LIMIT 0,这里是会改变的 ) as temp )
Up_Front 2018-02-09
  • 打赏
  • 举报
回复
确实,这些是小事,主要是实现思路,我写的这个不行在子查询中,调用父属性调用不到
Main_csdn_String 2018-02-09
  • 打赏
  • 举报
回复
看不懂啊。。
中国风 2018-02-08
  • 打赏
  • 举报
回复
你这样的语句能执行?先把语法处理好
id IN (
SELECT
*

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧