如果任何列有NULL值,删除MySQL中的行?

时间:2014-09-11 05:56:26

标签: mysql sql

如果任何列中包含NULL值,是否有办法删除行?我知道我可以一个接一个地检查列但是我想在MySQL中以编程方式执行此操作,如果我有4列或4000列,它将扩展。我相信我可以用PHP做到这一点,但我宁愿在直接的MySQL中做到这一点。

谢谢

3 个答案:

答案 0 :(得分:2)

好的,既然你刚才提到你是MySQL的新手,那么你的数据库设计也是新的,而且很可能目前还没有很多数据。

为什么不杀掉问题的根源,而不是让那些成长为一棵大树,然后寻找工具来切割所有分支?

您应该继续使用MySQL NOT NULL选项并禁止列的空值,因为您要删除它们。因此,如果您不需要保留任何空值,那么您可以简单地禁止它们,并且它们不会首先保存。

在正确的数据库设计之后很久就会出现查询,如果您的设计与您的系统要求不匹配,那么您只能在一定程度上优化查询。基础结构是您应该学习和改进的第一件事。谷歌和SO都充斥着成千上万篇关于高效数据库设计和一些基本概念的文章。

答案 1 :(得分:0)

我不太确定这是否适用于mysql,因为我无法测试它(我编辑的sql server代码可以使用mysql)

CREATE PROCEDURE myProc()
    BEGIN

     DECLARE COL varchar(4000);
     SELECT GROUP_CONCAT(C.COLUMN_NAME, ' IS NULL ' SEPARATOR ' OR ') FROM INFORMATION_SCHEMA.COLUMNS C WHERE C.TABLE_NAME = 'tbl_a' INTO COL;
     SET @s = CONCAT('SELECT * FROM test WHERE ', COL);
     PREPARE stmt FROM @s; 
     EXECUTE stmt;
     DEALLOCATE PREPARE stmt;

END//

我正在使用select语句来检查你是否需要更改它以删除

答案 2 :(得分:0)

您可以删除那些没有太多OR的记录:

DELETE FROM myTable
WHERE CONCAT(column1,column2,column3) is null

删除可以做什么可能没有意义,但是可以使用这个技巧来应该做什么

INSERT INTO NEW_TABLE
SELECT column1,column2,column3
FROM myTable
WHERE not CONCAT(column1,column2,column3) is null
相关问题