0

すべてのフィールドが Null (またはゼロ) の場合、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     |
--------------------------

ありがとう。

4

2 に答える 2

1

技術的には動的 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 | 値1 | 値3 |
+--------+--------+--------+
| | 1 | 3 | あ |
| | 2 | 5 | ビ |
| | 3 | 0 | シー |
| | 4 | 9 | D |
| | 5 | 7 | ヌル |
| | 6 | 9 | え |
+--------+--------+--------+
于 2013-06-22T22:48:38.367 に答える