postgresql - Postgres函数返回Select *来自多个表的结果
问题描述
我需要"select * from table1 t1 join table2 t2 on t1.id = t2.t2id where t1.id = _id"
使用函数 get_data(_id) 返回。
我找到了解决方案:https ://stackoverflow.com/a/11751557 但是一个表有结果,我不明白是否可以将连接添加到该查询以从多个表中获取结果?
我试过了:
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 主要问题是我需要动态地从连接表中获取所有列而不设置显式列名。
解决方案
你可以试试这个:
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$;
推荐阅读
- reactjs - 我可以在生产中使用 React suspense 吗?
- azure - 在 Azure 数据工厂中动态获取嵌套输出
- python - 在 Pycharm 中使用调试模式在执行时评估代码
- javascript - 如何检查 instagram.com/embed.js 是否已在 javascript/jquery 中加载?
- python - 每个主键的 Pandas 仅将具有最大值的行保留到另一列中
- excel - 如何使用 VBA 根据 Excel 中的关键字对文本字符串进行分类?
- fortran - 使用在线 Fortran 编译器从标准输入读取时出现“文件结尾”
- mysql - MySQL 插入失败,索引上有重复条目
- javascript - 在javascript变量中使用Jquery Selectors是否正确以及如何使用ajax获取城市和地区?
- max-msp-jitter - 如何为空列表制作此 Max MSP/M4L 补丁更新 zl.len 和 zl.mth?