2

私は今、私が望むもののために動作するmysqlクエリを作成することができません. 限りなく近づきました

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

これは失敗します。 INSERT IGNORE INTO について読んでいましたが、それも役に立ちませんでした。私がやろうとしているのは、このハッシュが誰のダウンロードフィールドのテーブルにも存在しない場合、このハッシュをユーザーのダウンロードフィールドに追加することです。

4

2 に答える 2

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値を持つ行がすでに存在する場合、UPDATE は実行されません。

IGNORE キーワードを使用すると、 [...] 重複キーの競合が発生した行は更新されません。

UPDATE 構文を参照してください。

于 2011-09-13T08:46:09.597 に答える
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'
于 2011-09-13T08:47:23.107 に答える