简体   繁体   English

SQL Concat_ws 所有列

[英]SQL Concat_ws all columns

I have to concat_ws all columns in my table.我必须 concat_ws 我表中的所有列。 I use sakila schema.我使用 sakila 模式。

I try to use this as subquery but i cant put it after select in main query.我尝试将其用作子查询,但我不能将其放在主查询中的 select 之后。

select column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='film'

also if this query found NULL i have to return "-"此外,如果此查询发现 NULL 我必须返回“-”

select concat_ws(",",COALESCE(film.title,"-"),COALESCE(film.rental_rate,"-"),COALESCE(language.name,"-")) as dane 
from film 
inner join language 
    on film.language_id = language.language_id;

Edit sorry my bad i dont specify my question.编辑对不起我的坏我没有指定我的问题。 I want to get data like in second query but in second query i have only 3 columns, I need to create query to have all the columns.我想在第二个查询中获取数据,但在第二个查询中我只有 3 列,我需要创建查询以包含所有列。

You can create it with MySQL and must execute it as PREPARED statement like this:您可以使用 MySQL 创建它,并且必须将其作为 PREPARED 语句执行,如下所示:

SELECT
    CONCAT( "SELECT CONCAT_WS(',',"
    , GROUP_CONCAT( CONCAT("COALESCE( `",TABLE_NAME,'`.`',column_name,'`,"-")') 
      )
    , ") AS dane FROM `", @mySchema, '`.`', @tableName, '`' 
    , " INNER JOIN language on film.language_id = language.language_id")
    INTO @msql
FROM INFORMATION_SCHEMA.COLUMNS
JOIN ( SELECT @mySCHEMA:="Kazoku", @tableName:="film" ) as INIT
WHERE
    TABLE_NAME= @tableName
AND
    TABLE_SCHEMA= @mySchema
ORDER BY
    `ORDINAL_POSITION`;
    
    
SELECT @msql; -- only for debug output

PREPARE stmt FROM @msql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

sample样本

MariaDB [Kazoku]> SELECT
    -> CONCAT( "SELECT CONCAT_WS(',',"
    -> , GROUP_CONCAT( CONCAT("COALESCE( `",TABLE_NAME,'`.`',column_name,'`,"-")') 
    ->   )
    -> , ") AS dane FROM `", @mySchema, '`.`', @tableName, '`' 
    -> , " INNER JOIN language on film.language_id = language.language_id")
    -> INTO @msql
    -> FROM INFORMATION_SCHEMA.COLUMNS
    -> JOIN ( SELECT @mySCHEMA:="Kazoku", @tableName:="film" ) as INIT
    -> WHERE
    -> TABLE_NAME= @tableName
    -> AND
    -> TABLE_SCHEMA= @mySchema
    -> ORDER BY
    -> `ORDINAL_POSITION`;
Query OK, 1 row affected (0.07 sec)

MariaDB [Kazoku]> 
MariaDB [Kazoku]> 
MariaDB [Kazoku]> SELECT @msql; -- only for debug output
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| @msql                                                                                                                                                                                                             |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SELECT CONCAT_WS(',',COALESCE( `film`.`id`,"-"),COALESCE( `film`.`datetime`,"-"),COALESCE( `film`.`language_id`,"-")) AS dane FROM `Kazoku`.`film` INNER JOIN language on film.language_id = language.language_id |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [Kazoku]> 
MariaDB [Kazoku]> PREPARE stmt FROM @msql;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

MariaDB [Kazoku]> 
MariaDB [Kazoku]> EXECUTE stmt;
+-------------------------+
| dane                    |
+-------------------------+
| 1,2021-01-01 00:00:00,1 |
+-------------------------+
1 row in set (0.00 sec)

MariaDB [Kazoku]> 
MariaDB [Kazoku]> DEALLOCATE PREPARE stmt;
Query OK, 0 rows affected (0.00 sec)

MariaDB [Kazoku]> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM