在Join中调用返回表的PostgreSQL函数

sdnqo3pr  于 2023-04-29  发布在  PostgreSQL
关注(0)|答案(3)|浏览(122)

我有以下查询:

WITH matching_data as (
 select * from consultants_matching_data_for_project(6001)
)

select 
  id,
  matching_data.city_matching

from 
  consultant_profiles
LEFT OUTER JOIN matching_data on matching_data.consultant_profile_id = consultant_profiles.id;

有没有其他方法可以在不使用WITH子句的情况下连接matching_data结果?

o0lyfsai

o0lyfsai1#

无论如何,不需要CTE,也不需要子查询。您可以像使用表一样使用函数:

SELECT
  consultant_profiles.id,
  matching_data.city_matching
FROM
  consultant_profiles
LEFT JOIN consultants_matching_data_for_project(6001) AS matching_data
  ON matching_data.consultant_profile_id = consultant_profiles.id;
1tuwyuhd

1tuwyuhd2#

看起来suquery工作得很好:

SELECT
  consultant_profiles.id,
  matching_data.city_matching
FROM
  consultant_profiles
  LEFT OUTER JOIN (
    SELECT *
    FROM consultants_matching_data_for_project(6001)
  ) AS matching_data
  ON matching_data.consultant_profile_id = consultant_profiles.id;
db2dz4w8

db2dz4w83#

您可以将函数调用直接移动到外部查询的from子句:

SELECT p.id, x.city_matching
FROM consultant_profiles p
LEFT JOIN consultants_matching_data_for_project(6001) x 
    ON x.consultant_profile_id = p.id;

来自文档:
SQL函数作为表源:所有SQL函数都可以在查询的FROM子句中使用

相关问题