侧边栏壁纸
博主头像
云BLOG 博主等级

行动起来,活在当下

  • 累计撰写 318 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
SQL

MySQL 更新数据 不同条件(批量)更新不同值

Administrator
2024-03-03 / 0 评论 / 0 点赞 / 35 阅读 / 0 字

搜索 mysql 满足条件更新字段

一般在更新时会遇到以下场景:1.全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法。

一、方法分类

二、具体用法

(1)根据条件更新值

根据指定条件更新(多列)(全部更新)

把表中 [符合条件的行的] 列名1字段中的值全部修改为值1 [,列名2字段中的值修改为值2]。

update 表名 
set 列名1 = 值1 [,列名2=值2]
[where 条件];

替换指定值(多列)(部分更新)

把表中 [符合条件的行的] 列名1字段中的查找内容全部修改为替换内容 [,列名2字段中的查找内容全部修改为替换内容]。

update 表名 
set 列名1 = replace(列名1, '查找内容', '替换内容') [,列名2 = replace(列名2, '查找内容', '替换内容')] 
[where 条件];

(2)按照不同条件(批量)更新不同值

使用 if

把表中 [符合条件的行的] 列名1字段中符合条件1的内容修改为值1,否则修改为值2 [,列名2字段中符合条件2的内容修改为值3,否则修改为值4]。

update table 
set 
	列名1 = if(条件1,值1,值2),
    列名2 = if(条件2,值3,值4)
[where 条件];

使用 case when

把表中 [符合条件的行的] 列名1字段中符合条件1的内容修改为值1 [,符合条件2的修改为值2,…] [,列名2字段中符合条件21的内容修改为值21,符合条件22的修改为值22,…] 。

update table 
set 列名1 =
    case
        when 条件1 then 值1
        when 条件2 then 值2
        when 条件3 then 值3
        ...
    end,
    列名2 =
    case
        when 条件21 then 值21
        when 条件22 then 值22
        when 条件23 then 值23
        ...
    end
[where 条件];

三、实例

students 表 (id表示主键,name是姓名,score是平均成绩)

id

name

score

1

李明

99

2

张三

74

3

孙华

59

(1)根据条件更新值

把 students 表中 name 为张三的 score 字段的值全部修改为100。

#使用where
update students 
set score = 100
where name = '张三';

id

name

score

1

李明

99

2

张三

100

3

孙华

59

把 students 表中 id 大于等于2的所有行中 score 中59的部分全部修改为0,name 中三的部分全部修改为四。

#使用replace
update students 
set score = replace(score,59,0),
	name = replace(name,'三','四')
where id >= 2;

注意:张三替换之后是张四,并不是只有字段等于三时才能替换。

id

name

score

1

李明

99

2

张四

74

3

孙华

0

(2)按照不同条件更新不同值

请把students表中score小于60的score字段全部改为0,否则改为100,name字段中的名字改为不及格,否则改为及格。

#批量更新多值 + if
update students 
set 
    score = if(score < 60,0,100),
    name = if(score < 60,'不及格','及格');

id

name

score

1

及格

100

2

及格

100

3

不及格

0

注意:更新的值要满足建表时的字段类型。比如score是int类型就不能更新为char类型。

请把students表中score小于60的score字段全部改为0,name字段中的名字改为不及格;score大于等于90的score字段全部改为2,name字段中的名字改为优秀;score大于等于60小于90的score字段全部改为1,name字段中的名字改为良好。

#批量更新多值 + case when
update students 
set 
    name = case
        when score < 60 then '不及格'
		when score >= 90 then '优秀'
        else '良好'
    end,
		score = case
        when score < 60 then 0
		when score >= 90 then 2
        else 1
    end;

注意:更新的时候是按照代码语句的先后顺序更新的。可以尝试先更新score后更新name,结果是不一样的。

id

name

score

1

优秀

2

2

良好

1

3

不及格

0

原文链接:https://blog.csdn.net/chengyj0505/article/details/128357191

ui li  下面所有后代都生效 不管几级

ui>li 只有下一级生效

h3+p 只有同级相邻的一个生效 往上无效

h3~p 同级的P 都生效 往上无效

insert into glg_base_vendor(uid,name,firmname,leader,area,city,phone,tel,zip,fax,email,address,topic,pinyin,qc,qcye,qmye,bqpf,bqth,operating,banking,bank,details) select unitid,name,jiancheng,Linkman,province,city,shouji,phone,postalcode,fax,email,address,homepage,pinyin,qc,qcye,qmye,bqpf,bqth,leibie,bank,Accounts,beizhu from dfch_gongyingshang;

insert into guests(name,card,cardtype,age,sex,yue,ri,count,amount,points,phone,tel,address,office,py,details)

select name,kahao,hykmc,nian,sex,yue,ri,ljcs,ljje,kyjf,shouji,phone,address,zhiye,pinyin,beizhu from guke;

insert into guests(name,card,cardtype,age,sex,yue,ri,count,amount,points,phone,tel,address,office,py,details)

select name,kahao,hykmc,nian,sex,yue,ri,ljcs,ljje,kyjf,shouji,phone,address,zhiye,pinyin,beizhu from guke;

			mysql把A表数据插入到B表数据的几种方法

 web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码。下面我以mysql数据库为例分情况一一说明:

1.如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:

     INSERT INTO 目标表 SELECT * FROM 来源表;

    insert into insertTest select * from insertTest2;

2.如果只希望导入指定字段,可以用这种方法:

INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;(这里的话字段必须保持一致)

   insert into insertTest2(id) select id from insertTest2;

3.如果您需要只导入目标表中不存在的记录,可以使用这种方法:

  

INSERT INTO 目标表

 (字段1, 字段2, ...)

 SELECT 字段1, 字段2, ...

 FROM 来源表

 WHERE not exists (select * from 目标表

 where 目标表.比较字段 = 来源表.比较字段);

 1>.插入多条记录:

insert into insertTest2

(id,name)

select id,name

from insertTest

where not exists (select * from insertTest2

where insertTest2.id=insertTest.id);

 2>.插入一条记录:

insert into insertTest

(id, name)

SELECT 100, 'liudehua'

FROM dual

WHERE not exists (select * from insertTest

where insertTest.id = 100);

// 查询出月大于 1的所有

SELECT * FROM 2023.`guests` WHERE yue >= 1;

/*UPDATE table SET xianKe = CONCAT('',xianKe,'');*/

UPDATE guests SET birthday = DATE_FORMAT(CONCAT_WS('-', "2000", yue,ri),'%Y-%m-%d') where yue >= 1 ;

#使用where 更新所有 条件 cardtype 为 钻石卡 cardid = 5

update guests

set cardid = 5

where cardtype = '钻石卡';

格式化日期显示

SELECT DATE_FORMAT('2000' ,'%Y-%m-%d')

0

评论区