SQLite的。 DELETE查询中的复杂条件?

时间:2017-06-27 09:49:04

标签: sqlite

我有一个没有主键列的表。第一列的类型为DATETIME,命名为DateTime,其余列为NVARCHAR类型(16)。 AlarmStatus列中的值可以是“0”或“1”。 因此,我的表可能有多个具有相同DateTime和不同AlarmStatus值的行。我想要一种方法来删除具有相同DateTime的所有行,如果它们中没有一个在AlarmStatus列中有'1'。 enter image description here

2 个答案:

答案 0 :(得分:1)

DELETE
FROM yourTable
WHERE DateTime IN
(
    SELECT DateTime
    FROM yourTable
    GROUP BY DateTime
    HAVING SUM(CASE WHEN AlarmStatus = '1' THEN 1 ELSE 0 END) = 0
)

答案 1 :(得分:1)

可以使用correlated subquery完成此操作:您要删除的行不存在具有相同DateTime值且设置为AlarmStatus的行:

DELETE FROM MyTable
WHERE NOT EXISTS (SELECT *
                  FROM MyTable AS T2
                  WHERE T2.DateTime = MyTable.DateTime
                    AND T2.AlarmStatus = '1');

或者,获取包含您要保留状态的所有时间戳的列表,并检查要删除的行没有其中一个:

DELETE FROM MyTable
WHERE DateTime NOT IN (SELECT DateTime
                       FROM MyTable
                       WHERE AlarmStatus = '1');