我有這樣一個表:MySQL的 - 如果空存在超過一個特定的NUM更多刪除行
id | name1 | name2 | name3
1 | asa | NULL | das
2 | NULL | NULL | asas
我想刪除一個有兩個或更多的時間NULL值(每行這裏,id = 2)
我已經做了一個小的PHP腳本,但我不知道這是否可以與MySQL查詢
我是新來的MySQL,所以我沒有嘗試任何東西呢!
我有這樣一個表:MySQL的 - 如果空存在超過一個特定的NUM更多刪除行
id | name1 | name2 | name3
1 | asa | NULL | das
2 | NULL | NULL | asas
我想刪除一個有兩個或更多的時間NULL值(每行這裏,id = 2)
我已經做了一個小的PHP腳本,但我不知道這是否可以與MySQL查詢
我是新來的MySQL,所以我沒有嘗試任何東西呢!
你將要使用多個過濾器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)
+1只是因爲 – Kermit
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)
您可以使用IS NULL
取得布林( 0或1),對這些結果求和並刪除總和大於或等於2的行。
像這樣:
delete from your_table
where ((name1 is null) + (name2 is null) + (name3 is null)) >= 2
+1因爲不同B-) –
相關,如果您需要刪除ALL列爲空的行,您可以這樣做。
該過程將刪除所有空值列的任何行,忽略可設置爲ID的主列。
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');
諷刺的是,這個問題是一個重複:P http://stackoverflow.com/questions/2630440/how-to-delete-duplicates-on-mysql-table –
@BenjaminGruenbaum我不同意 - 鏈接的問題問如何刪除重複,而這個問題是關於刪除符合特定條件的非重複行(這裏:至少三列中的兩個是NULL) –
@FrankSchmitt我沒有說它是一個確切的重複,但它是非常密切相關的海事組織。有效點。 –