Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL concatenando todas as colunas


Para concatenar todas as colunas em uma tabela, você não pode usar o * palavra-chave, mas você precisa listar explicitamente todas as colunas:
SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable

ou você pode querer usar CONCAT_WS que irá pular valores nulos:
SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable

Se você não quiser especificar todos os nomes de coluna manualmente, poderá usar uma consulta dinâmica. Esta consulta retornará todos os nomes de coluna da sua tabela:
SELECT `column_name` 
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='yourtable';

e usando GROUP_CONCAT você pode obter uma lista de todos os nomes de colunas:
GROUP_CONCAT(CONCAT('`', column_name, '`'))

entre aspas, em formato separado por vírgulas:
`col1`,`col2`,`col3`,`col4`,...

então agora temos todos os elementos para criar nossa consulta dinamicamente:
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;

esta consulta definirá a string @sql para algo como:
SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable

e este código irá executá-lo:
PREPARE stmt FROM @sql;
EXECUTE stmt;

Por favor, veja violino aqui .