Mysql循环赋值Update set

结果图:

INDEX_COL之前是空值。

现在有一个需求,根据staraircraft_id进行分组。

同一个staraircraft_id下,对INDEX_COL从0开始排序赋值。

首先,需要进行排序。

select 
    id,
    staraircraft_id,
    i
from
    (select  
        staraircraft_id,
        id,
        @i:=if(@gen=staraircraft_id,@i+1,0) i,
        @gen:=staraircraft_id
    from gacs_staraircraftpic,(select @i:=-1,@gen:=null) temp
    order by id, staraircraft_id asc) b

这样就可以分组排序

再直接进行赋值即可。

成功代码:

UPDATE gacs_staraircraftpic a, 
(

select 
    id,
	staraircraft_id,
    i
from
    (select  
        staraircraft_id,
        id,
        @i:=if(@gen=staraircraft_id,@i+1,0) i,
        @gen:=staraircraft_id
    from gacs_staraircraftpic,(select @i:=-1,@gen:=null) temp
    order by id, staraircraft_id asc
    ) b

) c

SET a.index_col = c.i WHERE a.id = c.id

 

MySQL 中处理空值(NULL)是数据库操作中常见的需求,特别是在数据导入、导出、查询和更新过程中。空值表示字段中没有可用数据,它不同于空字符串或零值。以下是几种常见的处理空值的方法: ### 插入 NULL 值 在插入数据时,如果希望某个字段为空,可以直接使用 `NULL` 关键字。例如: ```sql INSERT INTO table_name (column1, column2) VALUES (value1, NULL); ``` 这种方式允许字段为空,前提是该字段未被定义为 `NOT NULL` [^1]。 ### 更新字段为空值 在更新数据时,可以将字段设置为空值。例如: ```sql UPDATE table_name SET column_name = NULL WHERE condition; ``` 这将满足条件的记录的指定字段设置为空值 。 ### 查询空值 查询空值时,不能使用 `= NULL` 或 `<> NULL`,而应使用 `IS NULL` 或 `IS NOT NULL`。例如: ```sql SELECT * FROM table_name WHERE column_name IS NULL; ``` 这将返回所有指定字段为空值的记录 。 ### 用默认值替代空值 在查询时,如果希望用默认值替代空值,可以使用 `IFNULL` 函数或 `COALESCE` 函数。例如: ```sql SELECT IFNULL(column_name, 'default_value') FROM table_name; ``` 或 ```sql SELECT COALESCE(column_name, 'default_value') FROM table_name; ``` 这两个函数都可以在字段为空时返回指定的默认值 。 ### 导入数据时处理空值 在使用 Sqoop 等工具将数据从 Hive 导入到 MySQL 时,Hive 中的 `NULL` 在底层是以 `\N` 来存储,而 MySQL 中的 `NULL` 在底层就是 `NULL`。为了保证数据两端的一致性,在导出数据时可以采用 `--input-null-string` 和 `--input-null-non-string` 参数。导入时则使用 `--null-string` 和 `--null-non-string` 参数来处理空值 [^1]。 ### 使用存储过程处理空值 在存储过程中,也可以处理空值的情况。例如,定义一个变量并设置其为空值: ```sql DECLARE temp_ int; SET temp_ = NULL; ``` 在游标操作中,当没有找到记录时,可以将变量设置为空值: ```sql DECLARE CONTINUE HANDLER FOR NOT FOUND SET temp_ = NULL; ``` 这确保了在特定条件下变量可以被正确地设置为空值 [^2]。 ### 批量插入时处理空值 在批量插入数据时,如果某些字段可能为空,可以通过 `CASE` 语句或 `IF` 函数来处理。例如: ```sql INSERT INTO table_name (column1, column2) SELECT column1, CASE WHEN column2 IS NULL THEN 0 ELSE column2 END FROM source_table; ``` 这将空值替换为 `0`,确保插入的数据符合业务需求 [^3]。 ### 总结 MySQL 提供了多种方法来处理空值,包括插入、更新、查询以及用默认值替代空值。根据具体的业务场景选择合适的方法可以有效避免数据不一致或错误的问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值