根据条件删除 SELECT 语句中的行
DELETE rows in a SELECT statement based on condition
我有一个非常简单的 table 来保持玩家禁令。只有两列(实际上不是,但为了简单起见)- 玩家的唯一 ID (uid) 和禁令到期日期 (expiredate)
我不想在 table 中保留过期的禁令,因此需要删除过期日期 < 当前日期的所有禁令。
要查看玩家是否被禁止,我用他的 uid 和当前日期查询此 table 以查看是否有任何条目。如果有 - 我们确定该玩家被禁止。
所以我需要 运行 两个查询。一个可以让我获得禁令,另一个可以清除 table 多余的禁令。
我想知道是否可以将这些查询合并为一个。 Select 和 return 如果条目仍然相关,则删除该条目,如果不相关,则 return 什么都不做。
有什么好的方法可以在单个 select 查询中执行此操作?
编辑:
澄清一下,我实际上在 table 中还有一些其他信息,例如封禁原因、封禁日期等,所以我需要 return 该行并删除不相关的内容条目。
DELETE FROM TableName
WHERE expiredate < CURDATE();
delete from player_bans p
where exists (
select 1 from player_bans
where p.uid = uid
and expire_date < current_date)
这是你想要做的吗?
很遗憾,您不能在 select 语句中包含删除语句...我给您提供了一个 link from sqlite docos 供您参考。
Select 语句仅用于检索数据。尽管 select
可用于 delete
语句的子查询,但它仍将用于检索数据。
您必须在您的案例中分开执行这两个语句。
我有一个非常简单的 table 来保持玩家禁令。只有两列(实际上不是,但为了简单起见)- 玩家的唯一 ID (uid) 和禁令到期日期 (expiredate)
我不想在 table 中保留过期的禁令,因此需要删除过期日期 < 当前日期的所有禁令。
要查看玩家是否被禁止,我用他的 uid 和当前日期查询此 table 以查看是否有任何条目。如果有 - 我们确定该玩家被禁止。
所以我需要 运行 两个查询。一个可以让我获得禁令,另一个可以清除 table 多余的禁令。
我想知道是否可以将这些查询合并为一个。 Select 和 return 如果条目仍然相关,则删除该条目,如果不相关,则 return 什么都不做。
有什么好的方法可以在单个 select 查询中执行此操作?
编辑:
澄清一下,我实际上在 table 中还有一些其他信息,例如封禁原因、封禁日期等,所以我需要 return 该行并删除不相关的内容条目。
DELETE FROM TableName
WHERE expiredate < CURDATE();
delete from player_bans p
where exists (
select 1 from player_bans
where p.uid = uid
and expire_date < current_date)
这是你想要做的吗?
很遗憾,您不能在 select 语句中包含删除语句...我给您提供了一个 link from sqlite docos 供您参考。
Select 语句仅用于检索数据。尽管 select
可用于 delete
语句的子查询,但它仍将用于检索数据。
您必须在您的案例中分开执行这两个语句。