ホームページ >データベース >mysql チュートリアル >SQL Server 2005でMySQLのGroup_Concatをシミュレートする方法は?
group_concat
のレプリケーションSQL Server 2005 には MySQL にある便利な group_concat
関数がないため、グループ内の値を連結する必要がある場合に問題が生じます。カスタム関数は解決策を提供しますが、実装に詳しくない人にとっては扱いにくい場合があります。
実際的な代替方法は、SQL Server のシステム テーブルと FOR XML PATH
関数を利用します。 以下に例を示します:
<code class="language-sql">SELECT table_name, LEFT(column_names , LEN(column_names )-1) AS column_names FROM information_schema.columns AS extern CROSS APPLY ( SELECT column_name + ',' FROM information_schema.columns AS intern WHERE extern.table_name = intern.table_name FOR XML PATH('') ) pre_trimmed (column_names) GROUP BY table_name, column_names;</code>
特殊文字の処理を改善するための、より堅牢なアプローチは次のとおりです。
<code class="language-sql">WITH extern AS (SELECT DISTINCT table_name FROM INFORMATION_SCHEMA.COLUMNS) SELECT table_name, LEFT(y.column_names, LEN(y.column_names) - 1) AS column_names FROM extern CROSS APPLY (SELECT column_name + ',' FROM INFORMATION_SCHEMA.COLUMNS AS intern WHERE extern.table_name = intern.table_name FOR XML PATH(''), TYPE) x (column_names) CROSS APPLY (SELECT x.column_names.value('.', 'NVARCHAR(MAX)')) y(column_names);</code>
これらのメソッドは、複雑なユーザー定義関数を必要とせずに group_concat
を効果的に模倣しているため、高度な SQL の経験が浅い開発者でもプロセスが簡単になります。
以上がSQL Server 2005でMySQLのGroup_Concatをシミュレートする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。