ホームページ >データベース >mysql チュートリアル >Informix SQL で 1 対多の関係をカンマ区切りのリストとして表示するにはどうすればよいですか?
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
追加メモ
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 サイトの他の関連記事を参照してください。