ホームページ >データベース >mysql チュートリアル >PL/pgSQLを使用してPostgreSQLで複数のフィールドを単一のレコードとして返す方法?
PL/pgSQL を使用して PostgreSQL のレコードとして複数のフィールドを返す
PL/pgSQL で、異なるフィールドから複数のフィールドを返す関数を作成する単一レコードとしてのテーブルは、RECORD タイプを使用して実現できます。方法は次のとおりです。
RECORD タイプ
返したいフィールドを定義する RECORD タイプを宣言します。例:
CREATE TYPE person AS ( name text, age integer, city text );
異なるテーブルのクエリ
PL/pgSQL 関数で、クエリを使用して異なるテーブルからフィールドを取得します。たとえば、ユーザー、住所、都市のテーブルがある場合は、次のように記述できます。
SELECT u.name, u.age, a.city FROM users AS u JOIN addresses AS a ON u.address_id = a.id WHERE u.user_id = @user_id;
クエリ結果の保存
クエリ結果をレコード変数に保存する。 RECORD タイプを使用すると、列名によってフィールドにアクセスできます:
DECLARE result person; SELECT u.name, u.age, a.city INTO result;
レコードを返す
最後に、結果レコードを返します:
RETURN result;
不規則な結果の処理
異なるテーブルから一貫性のない数の行を取得する場合は、coalesce() 関数を使用してフォールバック値を提供します。
SELECT coalesce(u.name, 'Unknown'), coalesce(u.age, 0), coalesce(a.city, 'N/A') INTO result;
サブクエリを使用した例
データが返す必要がある場合は、単一のテーブルに個別の行として保存されます。 subquery:
CREATE FUNCTION get_two_users_from_school(schoolid int) RETURNS my_type AS $$ DECLARE result my_type; BEGIN -- Select first two users from school SELECT id, name FROM user WHERE school_id = schoolid ORDER BY id LIMIT 2 INTO result; RETURN result; END $$ language plpgsql;
このアプローチにより、行を単一のレコード構造に「フラット化」できます。
以上がPL/pgSQLを使用してPostgreSQLで複数のフィールドを単一のレコードとして返す方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。