0

私はこの単純な更新クエリを持っています:

UPDATE
    erif_notify e
SET
    e.current_amount = '0.00'
    ,e._date = now()
WHERE
    id IN ( SELECT
                en.id
            FROM
                u_contracts uc
            JOIN
                erif_notify en
            ON
                en.contract_id = uc.id
            WHERE
                uc._status = 7
          )

しかし、それは私にそのようなエラーを与えます:

You can't specify target table 'e' for update in FROM clause

なぜそれが私にこれを与えるのですか?

2 つの別々のクエリで実行できることはわかっていますが、1 つのクエリで実行できますか?

前もって感謝します。

4

4 に答える 4

1

どうぞ...この答えはテストされ、機能します:

サンプル

UPDATE
    erif_notify e
    INNER JOIN u_contracts uc
        ON e.contract_id = uc.id
        AND uc._status = 7
SET
    e.current_amount = '0.00',
    e._date = NOW();
于 2012-09-25T12:53:24.263 に答える
1

これには二重のサブクエリが必要だと思いますが、

UPDATE
    erif_notify e
SET
    e.current_amount = '0.00' ,
    e._date = now()
WHERE
    id IN ( SELECT x.ID FROM 
              (
                 SELECT  en.id
                 FROM u_contracts uc
                      JOIN  erif_notify en
                         ON en.contract_id = uc.id
                 WHERE uc._status = 7
              ) x
          )

「句のネストされたサブクエリはFROM暗黙的な一時テーブルを作成するため、更新している同じテーブルとしてカウントされません。」

于 2012-09-25T12:52:54.483 に答える
0

私はあなたの質問を数回読みました、そして...
それはと同一ではありません

UPDATE
    erif_notify e
SET
    e.current_amount = '0.00'
    ,e._date = now()
WHERE
    e.contract_id IN ( SELECT
                uc.id
            FROM
                u_contracts uc
            WHERE
                uc._status = 7
          )
于 2012-09-25T13:08:01.463 に答える
0

Edit like this ans try

UPDATE
erif_notify as e
SET
e.current_amount = '0.00'
,e._date = now()
WHERE
id IN ( SELECT
            en.id
        FROM
            erif_notify en                
        JOIN
            u_contracts uc
        ON
            en.contract_id = uc.id
        WHERE
            uc._status = 7
      )
于 2012-09-25T12:50:45.967 に答える