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
如果大家有想法,或者成功实现了,或者优化了,请在评论区教教我,谢谢
