gpt4 book ai didi

mysql - 如果该列的所有字段均为空(或零),则转义整个列

转载 作者:行者123 更新时间:2023-11-29 13:47:02 24 4
gpt4 key购买 nike

如果所有字段都为空(或零),MySQL 查询是否有办法不获取列?或者有什么方法可以从查询结果中删除此类列?例如,我有不同的表,其中一个可能如下所示:

____________________________________________
| id | value1 | value2 | value3 | value4 |
--------------------------------------------
| 1 | 3 | 0 | A | Null |
| 2 | 5 | 0 | B | Null |
| 3 | 0 | 0 | C | Null |
| 4 | 9 | 0 | D | Null |
| 5 | 7 | 0 | Null | Null |
| 6 | 9 | 0 | E | Null |
--------------------------------------------

最后我需要这样的东西:

__________________________
| id | value1 | value3 |
--------------------------
| 1 | 3 | A |
| 2 | 5 | B |
| 3 | 0 | C |
| 4 | 9 | D |
| 5 | 7 | Null |
| 6 | 9 | E |
--------------------------

谢谢。

最佳答案

从技术上讲,您可以使用动态 SQL 来做到这一点,但是否必须继续采用这种方法是非常值得怀疑的。

DELIMITER $$
CREATE PROCEDURE sp_select_not_empty(IN tbl_name VARCHAR(64))
BEGIN
SET @sql = NULL, @cols = NULL;
SELECT
GROUP_CONCAT(
CONCAT(
'SELECT ''',
column_name,
''' name, COUNT(NULLIF(',
column_name, ', ',
CASE WHEN data_type IN('int', 'decimal') THEN 0 WHEN data_type IN('varchar', 'char') THEN '''''' END,
')) n FROM ',
tbl_name
)
SEPARATOR ' UNION ALL ') INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = tbl_name;

SET @sql = CONCAT(
'SELECT GROUP_CONCAT(name) INTO @cols FROM (',
@sql,
') q WHERE q.n > 0'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;

SET @sql = CONCAT('SELECT ', @cols, ' FROM ', @tbl);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

现在调用我们的程序

CALL sp_select_not_empty('Table1');

我们得到

+------+--------+--------+| id   | value1 | value3 |+------+--------+--------+|    1 |      3 | A      ||    2 |      5 | B      ||    3 |      0 | C      ||    4 |      9 | D      ||    5 |      7 | NULL   ||    6 |      9 | E      |+------+--------+--------+

关于mysql - 如果该列的所有字段均为空(或零),则转义整个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com