如何删除SQL数据库中的特定条目?

问题描述 投票:0回答:1

假设 SQL 表中有 3 列:A、B 和 C。A 列中包含员工,B 列中包含条目日期,C 列中包含条目值。有些员工每天有 3 条记录,有的有 2 条记录,有的只有 1 条记录。如果一名员工每天只有一个条目,那么可以使用什么 SQL 脚本来删除这些条目呢?谢谢。 附:使用 Firebird 2.5,所以并非所有最新命令都可用...:-(

我正在尝试这个:

DELETE FROM my_table AS t1
WHERE (
    SELECT COUNT(*)
    FROM my_table AS t2
    WHERE t1.employee = t2.employee AND t1.entry_date = t2.entry_date
) = 1;

但是脚本卡住了......也许是因为数据库太大?

sql firebird firebird2.5
1个回答
0
投票

您的

WHERE
子句基本上是
...COUNT(*).... = 1
- 如果
COUNT(*)
翻译为
1
,那么您的
WHERE
子句就变成
WHERE 1=1
。这是危险的——基本上你是在指示数据库
DELETE
1 = 1 的所有行,这意味着你最终将删除表中的每一行,因为 1 始终等于 1。

我想你想要的是这样的:

DELETE FROM my_table
WHERE employee in (
  SELECT employee FROM my_table GROUP BY employee HAVING count(*) = 1)

如果您想以较小的块进行,您可以执行以下操作:

DELETE FROM my_table
WHERE employee in (
  SELECT employee FROM my_table GROUP BY employee HAVING count(*) = 1 LIMIT <number_of_rows>)

这在 PostgreSQL 中有效——我对其他 RDBMS 中的

HAVING
语法了解不够

© www.soinside.com 2019 - 2024. All rights reserved.