mysql执行插入操作_使用CONCAT语句批量执行MySQL插入操作

"本文介绍了如何在MySQL中通过CONCAT和GROUP_CONCAT功能,针对大量数据的表X和表Y,查找表X中Key2以"ZH_"开头的记录,提取对应的Key1值,并将这些值批量插入到表Y中,同时设置特定键值。通过实例展示了如何构造INSERT INTO语句以提高执行效率。"
摘要由CSDN通过智能技术生成

背景

批量插入是在MySQL操作中经常需要使用到的。使用CONCAT和GROUP_CONCAT语句将能够很大程度上提升工作效率,减少了对使用脚本完成任务的需求。通常情况下,直接使用SQL语句能够比使用脚本运行效率高上许多。

今天在工作过程中遇到了如下的一个实际问题:有两个表,数据量较大,分别为表X和表Y,结构如下:

# X表

Key1 Key2 Key3 ... KeyN

1 Val 1 ...

2 Val 2

3 Val 3

4 Val 4

... ...

N Val N

# Y表

KeyA KeyB KeyC

2 Val A 0

1 Val B 1

3 Val C 1

2 Val D 0

... ... ...

N Val E 0

需要进行的操作是,找出X表中Key2值中以“ZH_”开头的项目,提取出对应的Key1的值,将Key1的值对应插入Y表的KeyB。插入时,对应的KeyA置为3,KeyC置为0。

例如,在X表中有如下一个条目

Key1 Key2 Key3 ... KeyN

28 ZH_123 ...

这个条目满足要求,插入表Y

KeyA KeyB KeyC

3 28 0

解决

考虑使用如下命令执行批量操作

INSERT INTO table_name (key1, key2, key3 ...) VALUES (val1a, val2a, val3a...), (val1b, val2b, val3b...)...;

要使用如下命令,关键难度在于得到VALUE部分,所以这里使用CONCAT和GROUP_CONCAT组合命令来完成。

首先,使用以下命令,得到组合好格式的VALUES

SELECT GROUP_CONCAT(CONCAT( "(3,",Key1 ,",0)") SEPARATOR ',') FROM Table_X WHERE Key2 LIKE "ZH_%";

#使用上条命令后将得到如下查询结果:

(3,28,0), (3,30,0), (3,41,0), (3,52,0), (3,78,0)...

将结果组合到INSERT INTO语句中,便得到了我们需要的语句:

INSERT INTO Table_Y (keyA, KeyB, KeyC) VALUES (3,28,0), (3,30,0), (3,41,0), (3,52,0), (3,78,0)...;

顺便提一句,使用以下命令是无法完成的:

INSERT INTO Table_Y (keyA, KeyB, KeyC) VALUES (SELECT GROUP_CONCAT(CONCAT( "(3,",Key1 ,",0)") SEPARATOR ',') FROM Table_X WHERE Key2 LIKE "ZH_%");

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值