PSQL查询某一字段以外的其他字段的数据
有时候会遇到:查询过程,有一部分字段是不需要的,但是字段数量太多了,一个个输入目标字段,真的是太麻烦了,所以写了个函数,用于避开某一字段,自动生成一句命令。
CREATE OR REPLACE FUNCTION "get_sepcify_fileds"("reln" VARCHAR, "n_index" INT) RETURNS VARCHAR AS $BODY$BEGIN -- Routine body goes here... RETURN(SELECT string_agg ( NAME, , ) FROM ( SELECT A.attname AS NAME FROM pg_class AS C, pg_attribute AS A WHERE C.relname = reln AND A.attrelid = C.oid AND A.attnum != n_index AND A.attnum > 0 ) dd) ; END$BODY$ LANGUAGE plpgsql
不过最后生成的结果依旧是一个表,只是方便了取出字段 还是需要手动再把这句命令加进去。所以还是很鸡肋。 由于我是自学的SQL,水平有限,我觉得这个函数有两处优化的空间,但是还没有实现出来: 1.如何将这句形成命令,融入到查询中,使得查询更加自动化、便捷化。 2.关于n_index,如何实现排除多个字段 一个变种: 可以把n_index从坐标换成对应的字段名字
CREATE OR REPLACE FUNCTION "get_sepcify_fileds"("reln" VARCHAR, "n_index" VARCHAR) --字符串类型 RETURNS VARCHAR AS $BODY$BEGIN -- Routine body goes here... RETURN(SELECT string_agg ( NAME, , ) FROM ( SELECT A.attname AS NAME FROM pg_class AS C, pg_attribute AS A WHERE C.relname = reln AND A.attrelid = C.oid AND A.attname != n_index --字段名 AND A.attnum > 0 ) dd) ; END$BODY$ LANGUAGE plpgsql
如果大家有想法,或者成功实现了,或者优化了,请在评论区教教我,谢谢