mysql 获取列但不包含空列

标签 mysql stored-procedures

我想选择 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/

相关文章:

mysql - CONCAT(MySql 存储过程)内的输出参数

MySQL存储过程查询变得区分大小写但简单查询返回结果不区分大小写

c# - UPDATE 语句中的语法错误 OleDb 异常

MySQL SUM IF 列具有特定值

mysql - 使用 Join 表获取总和

php - 如何在 mysql PHP 中插入用户登录日期时间

mysql - 在mysql表中存储日期时间

sql - 如何获取存储过程的返回值

mysql - 在存储过程中使用此脚本

c# - SQL Server中的存储过程;语法错误