Postgresql 如何对返回的结果使用join?

Postgresql 如何对返回的结果使用join?,postgresql,postgis,Postgresql,Postgis,现在我有以下功能: CREATE OR REPLACE FUNCTION set_city(_city_id bigint, _country_id integer, _lat float, lon float) RETURNS geo_cities LANGUAGE plpgsql as $$ DECLARE city_coords Geometry := ST_SetSrid(ST_MakePoint(_lon, _lat), 3395);

现在我有以下功能:

CREATE OR REPLACE FUNCTION set_city(_city_id bigint, _country_id integer, _lat float, lon float) RETURNS geo_cities LANGUAGE plpgsql as $$
    DECLARE
            city_coords Geometry := ST_SetSrid(ST_MakePoint(_lon, _lat), 3395);
            result record;
    BEGIN
            IF EXISTS (SELECT 1 FROM geo_cities gc WHERE gc.id = _city_id)
            THEN
                    UPDATE geo_cities
                    SET coords = city_coords, country_id = _country_id
                    WHERE id = _city_id
                    RETURNING * INTO result;
            ELSE
                    INSERT INTO geo_cities(id, country_id, coords)
                    VALUES (_city_id, _country_id, city_coords)
                    RETURNING * INTO result;
            END IF;
            RETURN result;
    END;
 $$
我想用join来表示我的结果。这就是我的意思:

  ...
  RETURNING 
    id as city_id,
    ST_X(coords) as lon,
  INNER JOIN geo_countries as gc ON gc.id = id
  ... 

我可以这样做吗?

您可以将函数调用的结果连接到表中,但方式略有不同:

SELECT
    gc.col_1, gc.col_2, /* ... as many as needed */
    city.id AS city_id, ST_X(city.coords) AS lon
FROM
    set_city(1234, 5678, 1.23, 3.45) AS city
    JOIN geo_countries AS gc ON gc.id = city.id

因此,在实践中,
set\u city(…)
SELECT
中的行为只是如果它是任何其他类型的表。

为什么需要创建第二个函数?为什么?这是我的需要,因为我不想直接使用查询。为此,我提出了这个问题,因为我不明白如何用一个函数来实现这一点。现在我有了第二个函数,但我觉得它不是很好。。。无论如何,谢谢你的建议对不起,我不明白你的问题。“如何对返回的结果使用联接?”我认为您需要更好地解释,给出一个示例,……插入新行后,我希望检索新创建的行,但需要附加联接。我的意思是:
插入geo_cities(id,country_id,coords)值(_city_id,_country_id,city_coords)返回*到结果中;返回查询选择*从结果内部联接`我想在一个函数内完成此操作。这可能吗?