我需要使用函数get_data(_id)返回"select * from table1 t1 join table2 t2 on t1.id = t2.t2id where t1.id = _id"。
我找到了解决方案:https://stackoverflow.com/a/11751557,但是有来自一个表的结果,我不能理解这是不是可以在这个查询中添加join来从多个表获得结果?
我试过了:
CREATE OR REPLACE FUNCTION get_data_test_2(_tbl_type anyelement,_tbl_type_2 anyelement, _id int)
RETURNS SETOF anyelement
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY EXECUTE format('
SELECT *
FROM %s as s1 -- pg_typeof returns regtype, quoted automatically
left join %s as s2 on s1.id = s2.t1id
WHERE id = s1.'||_id||''
, pg_typeof(_tbl_type))
USING _id;
END
$func$;但很明显,我需要动态地从连接表中获取所有列,而不设置显式的列名,这并不是UPD的主要问题。
发布于 2021-10-29 21:40:01
您可以尝试这样做:
CREATE OR REPLACE FUNCTION get_data_test_2(_tbl_type anyelement,_tbl_type_2 anyelement, _id int)
RETURNS SETOF record
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY EXECUTE format('
SELECT *
FROM %s as s1
left join %s as s2 on s1.id = s2.t1id
WHERE id = s1.'||_id
, pg_typeof(_tbl_type)
, pg_typeof(_tb2_type))
USING _id;
END
$func$;https://stackoverflow.com/questions/69709604
复制相似问题