Mysql IF NOT EXISTS然后语法

时间:2011-09-13 08:44:07

标签: mysql sql insert not-exists

我现在无法为我想要的东西设法生成一个有效的mysql查询。我和

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

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

2 个答案:

答案 0 :(得分:3)

移动EXISTS子句中的WHERE

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值的行,则不会执行更新。

  

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

请参阅UPDATE syntax

答案 1 :(得分: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'