Oracle の MySQL の GROUP_CONCAT に相当
MySQL の GROUP_CONCAT
関数は、複数の行を単一の文字列に効率的に結合します。 Oracle では、データベースのバージョンに応じて、同じ結果を達成するためのいくつかの方法を提供しています。
LISTAGG: 推奨される方法 (Oracle 11g 以降)
LISTAGG
関数は、最新の Oracle バージョン (11g 以降) で推奨されるアプローチです。これは、グループ内の値を連結するためのクリーンで効率的なソリューションを提供します。
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS names FROM table_x GROUP BY col1</code>
このクエリは、行を col1
でグループ化し、対応する col2
値をカンマとスペースで区切って col2
順に連結します。
カスタム関数: 古い Oracle バージョン (10g 以前) の場合
LISTAGG
がない Oracle 10g 以前のバージョンの場合、カスタム関数が必要です:
<code class="language-sql">CREATE OR REPLACE FUNCTION get_concatenated_values (input_val IN NUMBER) RETURN VARCHAR2 IS concatenated_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP concatenated_text := concatenated_text || ',' || x.col2; END LOOP; RETURN LTRIM(concatenated_text, ','); END; /</code>
使用法:
<code class="language-sql">SELECT col1, get_concatenated_values(col1) FROM table_name;</code>
この関数は、入力値に一致する行を反復処理し、col2
値を文字列に追加します。 LTRIM
関数は、先頭のカンマを削除します。
WM_CONCAT: 慎重に使用してください
一部の古い Oracle バージョンには WM_CONCAT
が含まれている場合があります。ただし、これはサポートされていない関数であり、その動作はバージョン間で一貫性がない可能性があります。 したがって、WM_CONCAT
を避け、代わりに LISTAGG
またはカスタム関数を使用することを強くお勧めします。
<code class="language-sql">SELECT col1, WM_CONCAT(col2) FROM table_name GROUP BY col1;</code>
Oracle のバージョンに適した方法を選択してください。 LISTAGG
は、新しいバージョンにとって推奨され、最も信頼性の高いソリューションです。 古いバージョンの場合は、カスタム関数が堅牢な代替手段を提供します。 絶対に必要な場合を除き、WM_CONCAT
は避け、その制限を理解してください。
以上がOracle で MySQL の GROUP_CONCAT を置き換える方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。