2017-07-16 3 views
0

は今、私は、次の機能を持っている:返された結果に対してjoinを使用するにはどうしたらいいですか?

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; 
$$ 

私は私の結果と参加使いたいです。それは私が意味するものです:

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

私はそれを行うことはできますか?

答えて

0

あなたはやや異なる方法で、テーブルへの関数呼び出しの結果を結合することができます。それは、他の種類であれば

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 

ので、実際には、SELECTset_city(...)振る舞うだけです表。

+0

2番目の機能を作成する必要があるようです。悲しいです... – Vitaly

+0

なぜ2番目の関数を作成する必要がありますか?何のために? – joanolo

+0

私はこの質問を直接必要としないので、私にとってこの必要があります。そのために私はこの質問を作成しました。なぜなら、私はこの機能を1つの機能でどのように行うことができるのか理解できないからです。今私は第二の機能を持っていますが、それはあまり良くないと思います...あなたのアドバイスのおかげでいずれにしても – Vitaly

関連する問題