0

我想从 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
4

1 回答 1

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();

你会得到

+-----+------+------+
| 姓名 | val1 | val3 |
+-----+------+------+
| 一个 | 1 | 2 |
| 乙 | 4 | 4 |
| c | 5 | 7 |
| 电子| 7 | 6 |
+-----+------+------+

这是SQLFiddle演示。

于 2013-06-22T11:26:00.120 回答