目录
🚀前言:
🌿 🌿 🌿 🌿 🌿 🌿每日一剂 🌿 🌿 🌿 🌿 🌿
🌿 🌿 🌿 🌿 🌿 🌿 🌿INSERT INTO 'B表 `(B表 对应A 表的 属性字段 ) select A表返回的属性字段(对应B表的) from A 表 where corp_id ='610003202012291' and card_model='03';
🌿 🌿 🌿 🌿INSERT INTO `card_order_info`(id,bal_bef select id,now() from card_order_backup where corp_id ='610003202012291' and card_model='03';
🌿 🌿首先 A,B二个表的属性字段必须对应上, 例如要传入A表查询返回的 固定值到B表, 那么A表就默认设置好 这些值!!! 例如我 这里面的 now()
🚀(select @i:=0) 设置任意变量值
🌿 🌿变量结合 insert select 语句 字段实现自增序列, 自增的变量要对准你插入的属性列
select (@i:=@i+1) as i,txn_date,import_time from qr_cd_backup_pack
insert INTO xx (id,app_id )select id,(@i:=@i+1) as order_no from xxx 表名 where id IN ('027a85de-04c4-11ec-bfbe-fa163ee79795','0d11b541-04c4-11ec-bfbe-fa163ee79795');
🚀inser select 语法介绍
🌿有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,可以使用如下的语句来实现:
🌿 INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name
上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了:
🌿INSERT INTO a (field1,field2) SELECT * FROM(SELECT b.f1,c.f2 FROM b JOIN c) AS 表名
主要思路就是把查询的东西 汇总在一个虚拟视图 临时表里面, 然后插入指定的表里面去
🚀语法错误注意
🌿注意也不要添加重复的值
🌿 🌿需要注意的是嵌套查询部分最后一定要有设置表别名,如下:
🌿 🌿 🌿SELECT * FROM (SELECT f1,f2 FROM b JOIN c) AS 表名
🌿 🌿 🌿 🌿即最后的AS 表名 是必须的(tb这个名称可以随意取),即指定一个别名。每个派生出来的新表都必须指定别名,否则在mysql中会报 错误
INSERT INTO A表名 (属性列) SELECT '查询结果集 FROM B表名 WHERE '条件' NOT IN (SELECT Name FROM A表名); 这个语句的意思是 查B表的数据, 必须是A表里面没有存在的数据
🚀变量复制详解:
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。
- 🌿set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量
- 🌿 🌿select @num:=1; 或 select @num:=字段名 from 表名 where ……
- 🌿 🌿 🌿注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
- 🌿 🌿 🌿 🌿select 字段名1,字段名2 into @变量1,@变量2 from 表名 where ......
在函数或存储过程或触发器中,在不能使用set的时候推荐第三种,因为第二种会在执行时返回查询结果,这在函数或触发器中会报 “Not allowed to return a result set from a function”错误。而第三种则不会报错。