MsySQL数据的删除和修改

表t_repo_plate中有相同车牌号不同车牌颜色的数据,但这些车牌其实只有1种颜色,说明有脏数据。t_repo_plate中的数据会不断更新。

[1]先修改车牌颜色错误的数据:

注:8其实应改为1

update t_repo_plate t4
    INNER JOIN (
        select t1.plate
        from (select plate from t_repo_plate where pcolor = 8) t1
                 left join (select plate from t_repo_plate where pcolor = 1) t2 on t1.plate = t2.plate
        where t2.plate is null
    ) t3
    ON t4.plate = t3.plate
set t4.pcolor = 1
where t4.pcolor = 8;

[2]经过以上面的处理后表中剩下的车牌颜色为8的是改不了数据,再把这些车牌颜色为8的数据删除:

delete from t_repo_plate where pcolor = 8;

[3]有的数据是同一个车牌既有0又有255,但255是错误的数据,要删除255这条并保留0这条:

DELETE t
FROM t_repo_plate t
Inner JOIN  (
    select t1.plate, t1.pcolor
    from t_repo_plate t1
             inner join (select plate from t_repo_plate where pcolor = 0) t2 on t1.plate = t2.plate
    where t1.pcolor = 255
) t3 on t.pcolor = t3.pcolor and t.plate = t3.plate;

备注:留档自查!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用MySQL的循环语句和UPDATE语句来实现循环更新。以下是一个简单的示例: ``` DELIMITER $$ CREATE PROCEDURE update_loop() BEGIN DECLARE i INT DEFAULT 1; DECLARE n INT; SELECT COUNT(*) FROM your_table INTO n; WHILE i <= n DO UPDATE your_table SET column_name = new_value WHERE id = i; SET i = i + 1; END WHILE; END $$ DELIMITER ; -- 执行存储过程 CALL update_loop(); ``` 上述代码中,首先创建了一个存储过程`update_loop()`,该过程中使用了`DECLARE`语句声明了两个变量`i`和`n`,并将`n`设置为表中记录的数量。然后使用`WHILE`循环语句,依次将每条记录的指定列更新为新的值,最后将`i`加1,直到所有记录都被更新完毕。最后,使用`CALL`语句调用该存储过程即可实现循环更新。 ### 回答2: MySQL循环更新是指在一个查询中重复执行更新操作,可以通过循环更新语句来批量修改数据库中的数据。在MySQL中,可以使用循环遍历匹配条件并逐一更新数据。 首先,我们需要创建一个循环来重复执行更新操作。MySQL中可以使用循环语句如WHILE或REPEAT来实现循环。具体操作如下: 1. 创建循环变量和结束变量,用于控制循环的条件和结束条件。 2. 使用循环语句来重复执行更新操作。可以使用UPDATE语句来更新满足条件的数据,同时使用LIMIT子句来限制每次更新的记录数量,以免造成性能问题。 3. 在循环中更新完数据后,需要对循环变量进行自增或更新结束条件。 4. 当循环结束时,退出循环。 以下是一个简单的示例:假设我们有一个students表,其中有id和score两个字段,我们要批量将分数小于60的学生的分数更新为60。 ``` DELIMITER // CREATE PROCEDURE update_scores() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE student_id INT; DECLARE student_score INT; DECLARE cur CURSOR FOR SELECT id, score FROM students WHERE score < 60; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO student_id, student_score; IF done THEN LEAVE read_loop; END IF; UPDATE students SET score = 60 WHERE id = student_id; END LOOP; CLOSE cur; END // DELIMITER ; CALL update_scores(); ``` 通过以上的示例代码,我们可以通过循环更新语句来批量修改满足条件的数据。当然,循环更新涉及到数据库操作,需要谨慎使用,以免对性能产生不利影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值