[英]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.