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'
Другие вопросы по тегам