如何解决执行条件删除时,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)
);
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 举报,一经查实,本站将立刻删除。