// 根据另一张表的数据关联修改表UPDATE project_lib_plus p
INNERJOIN street s ON s.streetname LIKE concat('%', substring( p.TOWNSHIP,1,2),'%')SET p.TOWNSHIP = s.streetcode
WHERE
p.YEAR= year1
AND p.MONTH= month1
AND p.BATCHNO = batchno1;
存储过程游标+预处理语句
CREATEDEFINER=`root`@`%`PROCEDURE`project_in_lib_calc`(IN`YEAR1`INT,IN`MONTH1`INT)BEGIN#Routine body goes here...DECLARE cname VARCHAR(50)DEFAULT('');# 注: 获取字段类型为 double(15,2) 的金额字段 游标,并运算该字段# 定义游标DECLARE cursor_m CURSORFOR(SELECT column_name FROM information_schema.COLUMNSWHERE table_name ='project_in_lib'AND table_schema ='xmgl'AND data_type ='double'and column_type='double(15,2)');# 游标执行到末尾时报错,设置判断条件为falseDECLARECONTINUEHANDLERFOR SQLSTATE '02000'SET cname ='';DECLARECONTINUEHANDLERFORNOT FOUND SET cname ='';STARTTRANSACTION;#开启游标OPEN cursor_m;#获取游标的字段 column_name,插入到cname变量FETCH cursor_m INTO cname;WHILE cname <>''DO# 拼接预处理sql语句SET@_sql1= concat(' UPDATE project_in_lib SET ', cname,' = ', cname,' * 10000 WHERE YEAR = ? AND MONTH = ? ');# 定义预处理语句PREPARE stmt FROM@_sql1;set@b= year1;set@c= month1;# 执行预处理语句EXECUTE stmt USING@b,@c;# 删除(释放)定义DEALLOCATEPREPARE stmt;# 获取下一条循环数据FETCH cursor_m INTO cname;ENDWHILE;CLOSE cursor_m;COMMIT;END
// 先将字段以分隔符拆分为多行SELECT*,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.programtype,',', b.help_topic_id +1),',',-1)AS ids
FROM
reportdetail AS a
JOIN mysql.help_topic AS b ON b.help_topic_id <( length( a.ids )- length(REPLACE( a.ids,',',''))+1)// 再进行group by......
将从表多行拼接到主表查询结果
SELECT*FROM(SELECT
s.xx
FROM
ssjg_spxx s
LEFTJOIN ssjg_htxx h ON s.id_htxx = h.id
LEFTJOIN ssjg_dw d ON s.id_dw = d.id
LEFTJOIN ssjg_fpxx f ON s.id_fpxx = f.id
WHERE1=1ORDERBY
s.id
) sp leftjoin--此处拼接从表(SELECT
sp.id_sp,
GROUP_CONCAT( fp.fphm ) fphm -- 列转行再分组查询FROM
ssjg_sptofp sp,
ssjg_fpxx fp
WHERE
sp.id_fp = fp.id
GROUPBY
id_sp
) sf on
sp.id = sf.id_sp