ホームページ >データベース >mysql チュートリアル >Informix SQL で 1 対多の関係をカンマ区切りのリストとして表示するにはどうすればよいですか?

Informix SQL で 1 対多の関係をカンマ区切りのリストとして表示するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-03 17:29:40326ブラウズ

How to Display One-to-Many Relationships as Comma-Separated Lists in Informix SQL?

Informix SQL を使用したカンマ区切りのリストを持つ一意の行としての 1 対多の関係

Stack Overflow で提起された質問と同様、これはこの記事では、1 対多の関係をカンマ区切りの単一の一意の行として表示する Informix SQL ソリューションを提供します。 lists.

初期データ

id     codes
63592  PELL
58640  SUBL
58640  USBL
73571  PELL
73571  USBL
73571  SUBL

必要な出力

id     codes
63592  PELL
58640  SUBL, USBL
73571  PELL, USBL, SUBL

カスタム ユーザー定義集計

を達成するには必要な出力には、カスタムのユーザー定義集計 (UDA) が必要です。以下は、group_concat という名前の UDA の例です。

CREATE FUNCTION gc_init(dummy VARCHAR(255)) RETURNING LVARCHAR;
    RETURN '';
END FUNCTION;

CREATE FUNCTION gc_iter(result LVARCHAR, value VARCHAR(255))
    RETURNING LVARCHAR;
    IF result = '' THEN
        RETURN TRIM(value);
    ELSE
        RETURN result || ',' || TRIM(value);
    END IF;
END FUNCTION;

CREATE FUNCTION gc_comb(partial1 LVARCHAR, partial2 LVARCHAR)
    RETURNING LVARCHAR;
    IF partial1 IS NULL OR partial1 = '' THEN
        RETURN partial2;
    ELIF partial2 IS NULL OR partial2 = '' THEN
        RETURN partial1;
    ELSE
        RETURN partial1 || ',' || partial2;
    END IF;
END FUNCTION;

CREATE FUNCTION gc_fini(final LVARCHAR) RETURNING LVARCHAR;
    RETURN final;
END FUNCTION;

CREATE AGGREGATE group_concat
    WITH (INIT = gc_init, ITER = gc_iter,
          COMBINE = gc_comb, FINAL = gc_fini);

グループ化された連結によるクエリ

group_concat UDA を元のデータに適用すると、一意の ID でグループ化でき、カスタムを使用してコードを集約するUDA:

SELECT id, group_concat(codes)
    FROM anonymous_table
    GROUP BY id;

出力

58640 SUBL,USBL
63592 PELL
73571 PELL,SUBL,USBL

追加メモ

  • この UDA は、次のデータ型を処理します。 VARCHAR(255) (数値または時間など) に変換できます。
  • Informix 12.10.FC5 では、集計結果の最大長は 16380 バイトであるようです。
  • UDA および関連関数を削除するには、次のコマンドを実行します。
DROP AGGREGATE IF EXISTS group_concat;
DROP FUNCTION IF EXISTS gc_fini;
DROP FUNCTION IF EXISTS gc_init;
DROP FUNCTION IF EXISTS gc_iter;
DROP FUNCTION IF EXISTS gc_comb;

以上がInformix SQL で 1 対多の関係をカンマ区切りのリストとして表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。