3

パーソナルジオデータベースをPostgreSQLにインポートしました。テーブルの1つに、新しい列を追加しました。この列は空です。この列に値を追加/挿入して、すべての行にデータが入力されるようにします。私が使用したとき:

INSERT INTO district (province_id) VALUES
('13'), ('13'), ('13'), ('13'), ('13'),  ('13'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('19'), ('19');

その結果、新しい行が作成されたため、17行ではなく、34行になりました。UPDATE ... Set ... = ... Where ....を使用しようとすると、クエリは正常に実行されましたが、行は影響を受けませんでした。私の質問は、新しく作成された列の各行の値を追加して、結果として新しい行が作成されないようにするにはどうすればよいですか?

よろしくお願いします。助けていただければ幸いです。

バルバーラ

4

1 に答える 1

4

まず、テーブル「district」で、「district」(主キー。「district_id」と呼ばれると思います)のすべてのレコードに固有の列を選択する必要があります。

次に、すべての「district_id」に対して「province_id」を設定する必要があります。

UPDATE district 
SET province_id = 13 -- put your province_id value here
WHERE district_id = 1234; -- put the key value here

「district_id」=1234の「district」内のレコードを検索し、「province_id」を13に設定します。

次にUPDATE、すべての地区にそのようなものを書くか、次のように書く必要があります。

WITH vals(district_id numeric, province_id numeric) as 
(    VALUES((1234,13), -- pairs of district_id , province_id
            (1235,13),
            (1236,13),
            ........)  -- write the pair for every district
)
UPDATE district as dist
SET province_id = vals.province_id
FROM vals
WHERE dist.district_id = vals.district_id
于 2012-11-19T08:19:11.523 に答える