2012-03-26 19 views
1

からで、更新のためのターゲット表を指定カント:mysqlの - 私は、このようなクエリを持っている句

UPDATE `user` 
SET mail='[email protected]' 
WHERE id = 
    IF((SELECT admin FROM user WHERE id = '1') > 2, 
     (SELECT id FROM user WHERE id='2'), 
     (SELECT id FROM user WHERE id = '1') 
    ) 

私は、エラーメッセージが表示されます、結果として:

「あなたは「ターゲット表を指定することはできません「FROM句での更新のための」

私はTUが指定したカラムの更新たい 『ユーザID管理『行のが名前の別の列の値に応じて1または2である」ユーザー 'テーブル』』から全ての行でのメールを' corectの構文で助けてください。

+0

DUP:http://stackoverflow.com/questions/45494/mysql-error-1093-cant-specify-target-table-for-update-in-from-clause – bernie

答えて

0
UPDATE `user` 
SET email='[email protected]' 
WHERE id = (SELECT id FROM (SELECT IF((SELECT admin FROM user WHERE id = '1') > 2, 
             (SELECT id FROM user WHERE id = '2'), 
             (SELECT id FROM user WHERE id = '1')) AS id 
          ) AS t 
      ); 
+0

は魅力のように動作します! – Kalreg

0
  1. クエリで同じテーブルを複数回使用しているとき、あなたは別名を使用する必要があります。

    SELECT *ユーザーU1 INNER FROM U2 ONユーザーを登録しよう...

  2. いただきましこれらのポイントサブセレクト?例えば、 は、この部分ではありません "(SELECT id FROM user WHERE id = '2')"は "2"と同じですか?

+0

値id = 2は単なる例である。この例の値2は、セッションに格納されているユーザーのログイン値の変更を変更します。 – Kalreg

+0

@Kalreg:O.K.しかし、それは無意味な例です。 'SELECT id FROM user WHERE id = example_value_stored_in_session'は常にexample_value_stored_in_sessionまたはNULLです。 – ruakh

+0

@Kalreg:はい、しかし、あなたがすでにIDを知っているレコードのための** id **を選択することは無意味です...;) – poncha

関連する問題