sql >> データベース >  >> RDS >> Mysql

すべての列を連結するMySQL

    テーブル内のすべての列を連結するために、*を使用することはできません。 キーワードですが、すべての列を明示的にリストする必要があります:

    SELECT CONCAT(col1, col2, col3, ....)
    FROM yourtable
    

    または、CONCAT_WSを使用することもできます null値をスキップします:

    SELECT CONCAT_WS(',', col1, col2, col3, ....)
    FROM yourtable
    

    すべての列名を手動で指定したくない場合は、動的クエリを使用できます。このクエリは、テーブルのすべての列名を返します:

    SELECT `column_name` 
    FROM   `information_schema`.`columns` 
    WHERE  `table_schema`=DATABASE() 
           AND `table_name`='yourtable';
    

    GROUP_CONCATを使用すると、すべての列名のリストを取得できます。

    GROUP_CONCAT(CONCAT('`', column_name, '`'))
    

    カンマ区切り形式で引用:

    `col1`,`col2`,`col3`,`col4`,...
    

    これで、クエリを動的に作成するためのすべての要素が揃いました。

    SELECT
      CONCAT(
        'SELECT CONCAT_WS(\'\',',
        GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name),
        ') AS all_columns FROM yourtable;')
    FROM   `information_schema`.`columns` 
    WHERE  `table_schema`=DATABASE() 
           AND `table_name`='yourtable'
    INTO @sql;
    

    このクエリは、@sql文字列を次のように設定します。

    SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable
    

    そしてこのコードはそれを実行します:

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    

    フィドルこちら をご覧ください。 。




    1. GETDATEを使用してストアドプロシージャを呼び出す')'の近くの構文が正しくありません

    2. MySQLストアドプロシージャでカンマ区切りのテキストを分割する方法

    3. MyBatis Batch Insert / Update For Oracle

    4. Springデータのエンティティにスキーマ名を追加しますか?