问题描述
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()