SQL服务器 - 删除多列具有null值或零值的行

Kat*_*thy 4 sql sql-server-2008

我是一个DB新手,我正在努力解决这个问题.我有一个包含以下列的现有表:

Showroom, Salesperson, Time1, Time2, Time3, Dte
Run Code Online (Sandbox Code Playgroud)

我正在尝试删除表中所有3个时间列中具有空值或零值的行.我尝试了以下方法:

DELETE FROM myTable 
WHERE EXISTS(
              SELECT * 
              FROM myTable 
              WHERE (Time1 IS NULL OR Time1 = 0) 
                AND (Time2 IS NULL OR Time2 = 0) 
                AND (Time3 IS NULL OR Time3 = 0)
            )
Run Code Online (Sandbox Code Playgroud)

值得庆幸的是,我正在研究数据库的测试版本,因为我删除了所有数据.真的很感激任何帮助.

jon*_*aze 19

查询应格式如下:

DELETE 
FROM myTable 
WHERE (Time1 IS NULL OR Time1 = 0) 
AND (Time2 IS NULL OR Time2 = 0) 
AND (Time3 IS NULL OR Time3 = 0)
Run Code Online (Sandbox Code Playgroud)

在做DELETE陈述,我认为最好总是先创建SELECT语句,然后改变它.

SELECT * --If this returns the correct records, simply change to DELETE
FROM myTable 
WHERE (Time1 IS NULL OR Time1 = 0) 
AND (Time2 IS NULL OR Time2 = 0) 
AND (Time3 IS NULL OR Time3 = 0)
Run Code Online (Sandbox Code Playgroud)

  • 绝对地,如果没有先运行select来查看哪些记录会受到影响,并且在运行ad hoc删除查询之前将其置于事务中而不运行提交,直到您看到受影响的记录数也很有用,那么永远不要执行删除操作. (4认同)
  • +1提及"首先选择".MyISAM表上有太多的bloopers(这里没有回滚)教会我先从select选项开始,或者至少先从WHERE子句开始,然后键入UPDATE/DELETE table_name :) (2认同)

Chr*_*oph 4

你想要的只是;

DELETE myTable
WHERE
  (Time1 IS NULL OR Time1 = 0)
  AND (Time2 IS NULL OR Time2 = 0)
  AND (Time3 IS NULL OR Time3 = 0)
Run Code Online (Sandbox Code Playgroud)