1

サブクエリに基づいてテーブルを更新しようとしています。したがって、UPDATE ステートメントのパラメーターとしてサブクエリの結果が必要です。

以下を試しましたが成功しませんでした:

UPDATE xx
INNER JOIN (
    SELECT r.id as id, w.state as state
    ...
) yy
SET xx.state = yy.state WHERE xx.id = yy.id;

編集: 完全なクエリ:

UPDATE dpcio_request xx
INNER JOIN (
    SELECT r.id as id, w.state as state
    FROM dpcio_request r
    JOIN dpcio_request_wf w
    ON (w.dpcio_request_id = r.id)
    WHERE w.id IN ( SELECT MAX(id)
            FROM `dpcio_request_wf`
            GROUP BY dpcio_request_id )
    ) r2 ON r1.id = r2.id
) yy ON yy.id = xx.id
SET xx.state = yy.state;
4

1 に答える 1

7

サブクエリに特別な計算がなく、それが別のテーブルからのものであると仮定すると、テーブルを直接結合できます。

UPDATE table1 a
       INNER JOIN table2 b
          ON a.id = b.id
SET    a.colName = b.value

更新 1

これは、クエリの簡略化されたバージョンです。

UPDATE  dpcio_request a
        INNER JOIN dpcio_request_wf b
            ON a.id = b.dpcio_request_wf
        INNER JOIN
        (
            SELECT  dpcio_request_id, MAX(id) max_ID
            FROM    dpcio_request_wf
            GROUP   BY dpcio_request_id
        ) c ON  b.id = c.max_ID AND
                b.dpcio_request_id = c.dpcio_request_id
SET     a.state = b.state
于 2013-02-09T06:35:01.507 に答える