web-dev-qa-db-ja.com

Mysqlで空白行を削除するにはどうすればよいですか?

100000を超えるデータ要素を含むテーブルがありますが、その中には350近くの空白行があります。 phpmyadminを使用してこの空白行を削除するにはどうすればよいですか?手動で削除するのは面倒な作業です。

8
Jose H d

一般的な答えは次のとおりです。

DELETE FROM table_name WHERE some_column = '';

または

DELETE FROM table_name WHERE some_column IS NULL;

参照: http://dev.mysql.com/doc/refman/5.0/en/delete.html

テーブルを投稿するときの詳細情報!〜

また、必ず次のことを行ってください。

SELECT * FROM table_name WHERE some_column = '';

削除する前に、削除する行を確認できます。 phpMyAdminでは、選択してから「すべて選択」して削除することもできると思いますが、よくわかりません。これはかなり高速で、非常に安全です。

31
Spiny Norman

Windowsのコマンドプロンプトでmysql操作を実行しています。そして基本的なクエリ:

delete * from table_name where column=''

そして

delete * from table_name where column='NULL'

動作しません。 phpmyadmin sqlcommandbuilderで機能するかどうかはわかりません。とにかく:

delete * from table_name where column is NULL 

正常に動作します。

5
NCA

列のデータ型に基づいて空の行を自動的に削除するPHPスクリプトがあります。

これにより、列タイプごとに「空」を異なる方法で定義できます。

例えば.

table
first_name (varchar) | last_name (varchar) | some_qty ( int ) | other_qty (decimal)

DELETE FROM `table` WHERE
(`first_name` IS NULL OR `first_name` = '')
AND
(`last_name` IS NULL OR `last_name` = '')
AND
(`some_qty` IS NULL OR `some_qty` = 0)
AND
(`other_qty` IS NULL OR `other_qty` = 0)

私のシステムでは「0」の値は無意味なので、空として数えます。しかし、あなたがそうするなら、私はそれを知りました(first_name = 0)MySQLでは文字列は常に== 0であるため、常にtrueになります。そこで、「空」の定義をデータ型に合わせて調整します。

3
Buttle Butkus

この手順では、IDとして設定される可能性のあるプライマリ列を無視して、nullのすべての列の行を削除します。お役に立てば幸いです。

DELIMITER //
CREATE PROCEDURE DeleteRowsAllColNull(IN tbl VARCHAR(64))
BEGIN
SET @tbl = tbl;
SET SESSION group_concat_max_len = 1000000;
SELECT CONCAT('DELETE FROM `',@tbl,'` WHERE ',(REPLACE(group_concat(concat('`',COLUMN_NAME, '` is NULL')),',',' AND ')),';') FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @tbl AND COLUMN_KEY NOT LIKE 'PRI' into @delete_all;
PREPARE delete_all FROM @delete_all;
EXECUTE delete_all;
DEALLOCATE PREPARE delete_all;
END //
DELIMITER ;

このような手順を実行します。

CALL DeleteRowsAllColNull('your table');
2
STWilson

私はこれがすでに答えられて、ダニを持っていることを知っています、しかし私はこれをするための小さな関数を書きました、そしてそれが他の人々に役立つかもしれないと思いました。

配列を使用して関数を呼び出し、異なるテーブルに同じ関数を使用できるようにします。

$tableArray=array("Address", "Email", "Phone"); //This is the column names
$this->deleteBlankLines("tableName",$tableArray);

これが配列を取得して削除文字列を作成する関数です

private function deleteBlankLines($tablename,$columnArray){
    $Where="";
    foreach($columnArray as $line):
        $Where.="(`".$line."`=''||`".$line."` IS NULL) && ";
    endforeach;
    $Where = rtrim($Where, '&& ');  
    $query="DELETE FROM `{$tablename}` WHERE ".$Where;
    $stmt = $this->db->prepare($query);
    $stmt->execute();
}

この関数は、複数のテーブルに使用できます。別のテーブル名と配列を送信するだけで、機能します。

私の関数は、空の列またはNULL列の行全体を同時にチェックします。 NULLをチェックする必要がない場合は、その部分を削除できます。

1
Thomas Williams