Mysql ЕСЛИ НЕ СУЩЕСТВУЕТ, то синтаксис
Я не могу сейчас создать рабочий запрос MySQL для того, что я хочу. Я подобрался как можно ближе
IF NOT EXISTS(SELECT *
FROM Users
WHERE Downloads='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4')
UPDATE Users
SET `Downloads`='c6310e0ae33f9377f6ae7994bbafe6e20113aaf4'
WHERE `User`='andrewfree';
Это терпит неудачу, я читал о INSERT IGNORE INTO, но это тоже не помогло. То, что я пытаюсь сделать, это добавить этот хэш в поле загрузки пользователей, если его нет в таблице ни в каком поле загрузки.
2 ответа
Переместить 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 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'