我现在还不能为我想要的东西生成一个工作的mysql查询。我尽可能的接近了
IF NOT EXISTS(SELECT *
FROM Users
WHERE Downloads='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4')
UPDATE Users
SET `Downloads`='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4'
WHERE `User`='andrewfree';这失败了,我正在阅读关于INSERT IGNORE INTO的文章,但这也没有帮助。我尝试做的是将这个散列添加到一个用户下载字段,如果它不存在于表中的任何人下载字段中。
发布于 2011-09-13 16:46:10
在WHERE子句中移动EXISTS:
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 syntax。
发布于 2011-09-13 16:47:23
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'https://stackoverflow.com/questions/7399052
复制相似问题