1

単一の SQL ステートメントで更新したいキーと値のペアのリストがあります。行ごとに更新値が異なります。別のテーブルの値を使用して動的な更新を行うのはかなり簡単なことのようです。しかし、私はテーブル内の値を更新していないので、そのために一時テーブルを作成したくありません。

次のようなことができるようになりたいです

UPDATE table
SET update_column = IN(value1,value2)
WHERE key_column IN(Key1 , Key2)
AND Criteria_column = 'Criteria'
4

1 に答える 1

1

PostgreSQL では、そしておそらく他のデータベースでは、以下を使用して「テーブル」をインプレースで構築できます (やや不器用です) UNION ALL:

UPDATE table
SET update_column = temp.value
FROM (
    SELECT 'foo' AS id, 'bar' AS value
      UNION ALL
    SELECT 'baz' AS id, 'qux' AS value
      UNION ALL
    SELECT 'et' AS id, 'cetera' AS value
) temp
WHERE key_column = temp.id
AND Criteria_column = 'Criteria';

最近のバージョンの PostgreSQL では、インプレース テーブルを作成するための構文が改善されました。

UPDATE table
SET update_column = temp.value
FROM (
    VALUES ('foo', 'bar'), ('baz', 'qux'), ('et', 'cetera')
) temp (id, value)
WHERE key_column = temp.id
AND Criteria_column = 'Criteria';
于 2012-12-12T04:18:41.890 に答える