在写查询语句时,可能会遇到这种场景:怎么 排除 某个字段查询表数据,这种情况特别是在当表字段特别多的时候,如果一个字段一个字段写 select t.a,t.b,t.c,t.xx ... from table_name t 特别麻烦,还容易写漏掉。

  • 先获取到所有字段的查询语句
  • 去掉不需要的字段即可
  • 开始前先看常规查询

    查询所有字段

    	select * from table_name
    

    查询几个字段

    select t.name,t.password,t.tel from table_name t
    

    排除某个字段查询

    获取所有表字段

    SELECT
    	'select ' || a.cols || ' from ' || a.table_name as sqlstring 
    SELECT
    	t.table_name,
    	LISTAGG( t.COLUMN_NAME,',') WITHIN GROUP ( ORDER BY t.COLUMN_NAME ) cols
    	user_tab_columns t 
    WHERE
    	t.TABLE_NAME = 'SR_SPONSOR' -- 表名称
    GROUP BY
    	t.table_name 
    

    获取到查询所有字段的语句

    这样不需要自己一个一个去写,去掉不需要的字段即可,还可以创建成函数,方便后期使用

    select PID,REPSONSIBILITY_ID,SIGNATURE,SIGNATURE_TIME,SPONSOR,SPONSOR_ID,SPONSOR_JOB,SPONSOR_ORG from SR_SPONSOR
    

    oracle listagg() 列转行函数

    该函数可以实现按条件实现列转行: 基础的用法如下: LISTAGG(a,b) WITHIN GROUP( ORDER BY c)

  • a:需要拼接的数据表中的字段
  • b:以什么字符分割,例如逗号,分号等字符
  • c bc是相同的字段
  • 它的用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。

    SELECT LISTAGG(t.name, ',') within group(ORDER BY t.name) FROM t_employee t ;
    

    查询结果:

    name1,name2,name3

  • 私信