1

私は常に正確に1つのレコードを返すこのような関数を持っています:

CREATE FUNCTION foo(pid int) RETURNS TABLE (a int, b int)
AS $$
   -- …
$$ LANGUAGE sql;

次のようなテーブルから行を選択したい:

SELECT p.id
     , foo(p.id).*
  FROM puns AS p;

ただし、これにより で構文エラーが発生し.*ます。は関数の引数であるJOINため、 でそれを行う方法がわかりませんでした。p.id

関数によって返されたレコードを選択クエリにアンパックするにはどうすればよいですか? 目的の結果には、 と の 3 つの列idaありbます。

PostgreSQL 9.2 を使用しています。

4

1 に答える 1

2

オプション 1 - postgres 9.3 にアップグレードして使用しますLATERAL

オプション 2 - 次のようなものを使用します。

SELECT sub_q.id, (sub_q.foo_row).a, (sub_q.foo_row).b
FROM (
SELECT p.id
     , foo(p.id) as foo_row
  FROM puns AS p ) sub_q;

オプション 3 - 次のような追加の括弧を試してください。

SELECT p.id
     , (foo(p.id)).*
  FROM puns AS p;

ただし、オプション 3 はテストしていません。

于 2013-09-17T10:42:49.827 に答える