sql - Sql Table 从 Postgres 函数的结果中选择
问题描述
我有一个函数可以生成下面定义的评估信息类型。
create type course_assessment_info as (
total_count int,
mark_average double precision,
weight_sum double precision,
weighted_mark_average double precision
);
当我将我的函数用于单个查询时,如下所示,我得到了预期的结果。
select *
from course_assessment_info_by_student_id_and_course_id('9be15896-40ca-46c6-8fdd-0ffe3bd79
586', '65dbdce1-fd76-4951-9db1-d089b3794d80');
结果 :
total_count | mark_average | weight_sum | weighted_mark_average
-------------+-------------------+-------------------+-----------------------
1 | 0.834768535328714 | 0.540032932289522 | 0.450802499916595
当我在使用连接的较大函数上使用它时,我没有得到单独的列名。我的理解是我需要使用 select * from course_asses... 但是,我很难弄清楚如何格式化,这样 PostgreSQL 就不会抛出语法错误。
select course_assessment_info_by_student_id_and_course_id(s.id, c.id)
from student s
join student_course sc on s.id = sc.student_id
join course c on c.id = sc.course_id;
谢谢你的帮助!
解决方案
你似乎想要LATERAL JOIN
:
SELECT t.*
FROM student s
INNER JOIN student_course sc ON s.id = sc.student_id
INNER JOIN course c ON c.id = sc.course_id
INNER JOIN LATERAL course_assessment_info_by_student_id_and_course_id(s.id, c.id) t ON true
这也应该这样做:
select (course_assessment_info_by_student_id_and_course_id(s.id, c.id)).*
from student s
join student_course sc on s.id = sc.student_id
join course c on c.id = sc.course_id;
推荐阅读
- excel - Excel公式将左侧数值与数据分开
- php - Jquery 选择唯一的下一个表行
- java - 如何在不使用机器人的情况下以编程方式共享带有从我的 Android 应用程序到 Telegram 的超链接的消息?
- refactoring - 在新文件重构扩展中创建 VS 2019 生成类型
- python - 在 Python 2 HTTP 服务器中创建延迟响应
- search - Fortran 95 中的二进制搜索
- spring-boot - FindOne 给我带来了缓存内存中的值,而不是 Spring Data 中数据库中的值
- flutter - 定位小部件全宽
- angular - Angular Material 9:如何修复 mat-select 内的 mat-form-field 中的错误
- javascript - 在 Express.js 应用程序中打开多个 MongoDB 连接