我想从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
答案 0 :(得分:0)
以下是如何做到这一点。假设是 ...具有空数据的列... 表示所有行都有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 演示。