我想选择 tbl1 中的所有列,但不选择 MySQL 存储过程中具有空数据的列。
我的结构如下:
tbl1
Name val1 val2 val3 val4
a 1 2
b 4 4
c 5 7
e 7 6
从tbl1中选择*,其中......
Result:
Name val1 val3
a 1 2
b 4 4
c 5 7
e 7 6
最佳答案
以下是您可以如何做到的。假设 ...具有空数据的列... 是指所有行都具有 NULL
值的列。
DELIMITER $$
CREATE PROCEDURE sp_select()
BEGIN
SET @tbl = 'tbl1', @sql = NULL, @cols = NULL;
SELECT
GROUP_CONCAT(
CONCAT(
'SELECT ''',
`column_name`,
''' name, COUNT(',
`column_name`, ') n FROM ',
@tbl
)
SEPARATOR ' UNION ALL ') INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = @tbl;
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();
你会得到
+------+------+------+ | Name | val1 | val3 | +------+------+------+ | a | 1 | 2 | | b | 4 | 4 | | c | 5 | 7 | | e | 7 | 6 | +------+------+------+
这里是SQLFiddle 演示。
关于mysql 获取列但不包含空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247443/