ホームページ > データベース > mysql チュートリアル > PL/pgSQL を使用して複数の PostgreSQL テーブルからレコード フィールドを取得して結合する方法

PL/pgSQL を使用して複数の PostgreSQL テーブルからレコード フィールドを取得して結合する方法

Patricia Arquette
リリース: 2025-01-04 13:56:40
オリジナル
222 人が閲覧しました

How to Retrieve and Combine Record Fields from Multiple PostgreSQL Tables using PL/pgSQL?

PL/pgSQL を使用して PostgreSQL の複数のテーブルからレコード フィールドを取得する

PL/pgSQL で異なるテーブルから複数のフィールドを 1 つのレコードとして返すには、次のカスタム レコードを構築する必要があります。希望のフィールド構成。これを実現する方法は次のとおりです:

レコード データ型の作成

CREATE TYPE ステートメントを使用してレコード タイプを定義し、フィールドとそのデータ型を指定します:

CREATE TYPE my_record_type AS (
  field1 text,
  field2 integer,
  field3 boolean
);
ログイン後にコピー

関数の実装

SP では、DECLARE ステートメントを使用してレコード型の変数を宣言し、フィールドに値を設定します。

DECLARE
  result my_record_type;
BEGIN
  SELECT field1, field2, field3 INTO result FROM table1;
  -- Retrieve and populate additional fields from other tables
  RETURN result;
END
ログイン後にコピー

複数行の結果の処理

テーブルから複数の行を取得し、それらを 1 つのレコードに集約するには、サブクエリの使用を検討してください。たとえば、ユーザー テーブルから行を取得して平坦化するには:

DECLARE
  result my_record_type;
BEGIN
  SELECT id, name FROM (
    SELECT id, name
    FROM user
    WHERE school_id = InputSchoolId
    LIMIT 2
  ) AS subquery
  INTO result;
RETURN result;
END
ログイン後にコピー

レコードの戻り値の型を使用する

関数を定義した後、関数を呼び出してレコードを取得します:

SELECT get_object_fields('name') AS record_output;
ログイン後にコピー

結果は、指定されたフィールドのフィールドを含むレコードになります。 tables.

多態性の結果に CREATE TYPE を使用することは推奨されませんが、柔軟性を高めるために RECORD タイプを活用できます。例:

CREATE FUNCTION test_ret(a text, b text) RETURNS RECORD AS $$
DECLARE 
  result RECORD;
BEGIN
  IF LENGTH(a) < LENGTH(b) THEN
    result = (TRUE, (a || b)::text, 'a shorter than b'::text);
  ELSE
    result = (FALSE, (b || a)::text, NULL::text);
  END IF;
RETURN result;
END;$$ LANGUAGE plpgsql;
ログイン後にコピー

これにより、さまざまな数の列を持つレコードを返すことができます。

以上がPL/pgSQL を使用して複数の PostgreSQL テーブルからレコード フィールドを取得して結合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート