我现在无法为我想要的东西设法生成一个有效的mysql查询。我和
一样接近IF NOT EXISTS(SELECT *
FROM Users
WHERE Downloads='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4')
UPDATE Users
SET `Downloads`='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4'
WHERE `User`='andrewfree';
这失败了,我正在读INSERT IGNORE INTO,但这也没有帮助。我想要做的是将此哈希添加到用户下载字段,如果它在anyones下载字段中的表中不存在。
答案 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'