微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

执行条件删除时,MySQL查询失败

如何解决执行条件删除时,MySQL查询失败

我有以下MysqL表:

CREATE TABLE IF NOT EXISTS otu_tokens (
  otu_token_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,otu_token_ref_id VARCHAR(36) NOT NULL,otu_is_claimed INTEGER,otu_expires_on DATETIME,CONSTRAINT pk_otu_tokens PRIMARY KEY (otu_token_id),INDEX idx_otu_tokens_ref_id (otu_token_ref_id),CONSTRAINT uc_otu_tokens_ref_id UNIQUE (otu_token_ref_id)
);

我想运行一个删除记录的查询,如果存在以下情况:

  1. 他们已被“声明”(otu_is_claimed = 1); OR
  2. 他们已经过期(otu_expires_on < Now IN UTC

UTC部分很重要;这些记录将以其otu_expires_on的值设置为UTC进行存储,因此我需要确保“ Now IN UTC”比较实际上使用的是UTC。

我最好的尝试:

DELETE FROM otu_tokens
WHERE otu_token_id IN (
  SELECT otu.otu_token_id
  FROM otu_tokens otu
  WHERE
    otu.otu_is_claimed = 1
    OR
    otu.otu_expires_on < UTC_TIMESTAMP()
);

产生以下错误

ERROR 1093 (HY000): You can't specify target table 'otu_tokens' for update in FROM clause

该如何解决查询,使其表现出所需的状态?

解决方法

我看不到子查询的要点,该要点将主键列的值返回到外部查询。这似乎可以满足您的要求:

DELETE FROM otu_tokens
WHERE otu_is_claimed = 1 OR otu_expires_on < UTC_TIMESTAMP()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。