6

私は次のようなテーブルを持っています:

ID | 名前1 | 名前2 | 名前3
1 | アサ | ヌル | ダス
2 | ヌル | ヌル | と同じように

NULL 値の 2 倍以上の行 (ここでは、id = 2 の行) をすべて削除したいです。
既に小さな PHP スクリプトでそれを実行しましたが、mysql クエリでそれを実行できるかどうか疑問に思っています。

私はmysqlを初めて使用するので、まだ何も試していません!

4

4 に答える 4

5

WHERE複数のフィルターで句を使用する必要があります。それぞれのチェックは列ですnull:

delete 
from yourtable
where 
  (name1 is null and name2 is null) or
  (name1 is null and name3 is null) or
  (name2 is null and name3 is null) or
  (name1 is null and name2 is null and name3 is null) 

デモで SQL Fiddle を参照してください

于 2013-03-28T19:57:49.947 に答える
1

関連して、すべての列が null である行を削除する必要がある場合は、これを実行できます。

このプロシージャは、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');
于 2016-02-14T12:52:47.247 に答える
1
delete from table where 
     (name1 is null AND name2 is null) OR
     (name2 is null AND name3 is null) OR
     (name1 is null AND name3 is null) OR
     (name1 is null AND name2 is null AND name3 is null)
于 2013-03-28T19:54:46.140 に答える
1

を使用IS NULLして、各列のブール値 (0 または 1) を取得し、それらの結果を合計して、合計が 2 以上の行を削除できます。

このような:

delete from your_table
where ((name1 is null) + (name2 is null) + (name3 is null)) >= 2 
于 2013-03-28T20:10:32.327 に答える