Mysql查询、插入学习记录
-
将查询出来的语句作为新表的插入数据
/* 语法:insert into tabel_A(field_a,field_b,field_c,...,field_n) select field_A,field_B,...,field_N from table_B */ /*示例:*/ INSERT INTO reset_page(`id`, `flh_ajh`, `jh`, `file_name`, `pdf_num`, `m_id`, `c2`, `c6`, `c11`) select p.*,m.id m_id, m.c2,m.c6, m.c11 from pdf_num p LEFT JOIN model1 m on concat_ws("-",p.flh_ajh,p.jh,null) = concat_ws("-",m.c2,m.c6,null )
以上示例还使用了mysql字段连接的函数concat_ws(replace_char,field_a,field_b,…),该语法是表示使用第一个连接符连接后面的字段,至少要有两个以以上的字段。与concat(field_a,field_b,…)不同之处就在于:concat_ws()每个字段之间会使用相同的连接符,而concat则只是连接两个字段,没有连接符。
关于concat_ws()与concat()语法可以参考:
https://www.cnblogs.com/crystaltu/p/6699004.html
https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc
-
将查询出来的结果作为更新另一个表的数据,update与select连用
/*update table_A a inner join (select field_a,field_b,... from table_B) b on b.field_a = a.filed_a set a.filed_b = b.filed_b*/ UPDATE model1 m inner JOIN (select pdf_num, m_id from reset_page) p on p.m_id = m.id SET m.c11 = p.pdf_num
-
前一列的两个字段累加值作为后一列字段的值
/*这里用到了@mysql的自定义变量*/ select b.c2,b.c6,b.c10,b.c11, concat(if(b.yh >= 10, "0","00"),yh) yh from (select c2,c6,c10,c11, (@yh := @yh + c11 )as yh from model1, (select @yh :=1) as c where c2= '4584' group by concat_ws("-", c2, c6)) b
mysql的@自定义变量使用:赋值使用 := ,最主要的是要在查询时把初始值设置进去,使用(select @a :=初始值)as 别名,并要放在查询的表名后面,如上所示:from model1, (select @yh :=1) as c
可以参考该文
https://www.jianshu.com/p/357a02fb2d64
https://blog.youkuaiyun.com/qq_28325291/article/details/81205861