2

我现在无法为我想要的生成一个有效的 mysql 查询。我尽可能接近

IF NOT EXISTS(SELECT * 
              FROM Users 
              WHERE Downloads='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4') 
UPDATE Users 
SET `Downloads`='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4' 
WHERE `User`='andrewfree';

这失败了,我正在阅读有关 INSERT IGNORE INTO 的信息,但这也没有帮助。我想要做的是将此哈希添加到用户下载字段,如果它不存在于任何人的下载字段的表中。

4

2 回答 2

3

EXISTSWHERE子句中移动:

UPDATE Users
SET    `Downloads`='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4'
WHERE  `User`='andrewfree'
AND    NOT EXISTS(
           SELECT 1
           FROM   Users
           WHERE  Downloads='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4'
       ) 

或者在 Users.Downloads 上添加一个唯一键并使用 UPDATE IGNORE:

ALTER TABLE Users ADD UNIQUE KEY downloads_unique (Downloads);

UPDATE IGNORE Users SET Downloads = 'c63...' WHERE User='andrewfree';

如果已存在具有此Downloads值的行,则不会执行 UPDATE。

使用 IGNORE 关键字,不会更新发生重复键冲突的 [...] 行。

请参阅更新语法

于 2011-09-13T08:46:09.597 回答
1
UPDATE Users 
SET `Downloads`='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4' 
WHERE `User`='andrewfree'
AND NOT EXISTS(SELECT * 
              FROM Users 
              WHERE Downloads='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4') 

编辑:

实际上,上面的语句会抛出一个错误。我认为这会做到(未经测试)

UPDATE Users u1 INNER JOIN Users u2 
                ON u2.Downloads='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4'
SET u1.`Downloads`='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4' 
WHERE u1.`User`='andrewfree'
于 2011-09-13T08:47:23.107 回答