场景:
项目上经常需要查询很多表中的大部分列,如何快速生成相应的SQL语句呢?
测试环境:
mysql5.7.29
pg11.6
oracle11.2.0.4
功能验证:
mysql5.7.29
查询业务表中除’ID’,‘title’以外所有的列
SELECT CONCAT(’ select ‘,GROUP_CONCAT(COLUMN_NAME),’ from ‘, TABLE_NAME,’ ;’) FROM information_schema.COLUMNS WHERE table_name = ‘server_info’ AND TABLE_SCHEMA = ‘webdata’ and COLUMN_NAME not in (‘ID’,‘title’)
生成的sql语句如下
select title,type_id,type,category_id,category,icon,longitude,latitude,is_del,sid,latitude_bd,longitude_bd,is_complete,ec_url,show_level,voice_url,icon_s,pid,scenic_lat_lng_id,is_more_area_show from server_info ;
pg11.6
select ‘select ‘||string_agg(column_name,’,’)||’ from ‘||table_name||’;’ from information_schema.columns where table_schema=‘public’ and table_name=‘pic’ and column_name not in(‘id’,‘type’)
group by table_name;
oracle11.2.0.4
总结:
1、项目上要查询表中大部分列,通过这种方式来生成sql语句还是比较高效的
2、想法很重要,当要查询一个表中大部分列时,挨个输入字段名太多了,得反向思考。
3、你遇到上面的场景会怎么做呢