2012-03-22 8 views
1

子サブテーブルがresultとしましょう。サブテーブルを更新する

SELECT school, grade 
    FROM (SELECT school, grade 
      FROM simulated_records 
     LIMIT 10) as result 

このサブテーブルの列を更新するにはどうすればよいですか?私は試しました:

UPDATE result 
    SET grade = 'A' 

...私はエラーが発生します。

+1

名前付きサブセレクトはテーブルではありません。 simulated_recordsテーブルを直接更新します。 – tawman

+2

可能な複製[サブクエリを使ってポストグルでテーブル行を更新する](http://stackoverflow.com/questions/6256610/updating-table-rows-in-postgres-using-subquery) – bernie

答えて

2

sub * choose *は一時的なものです。更新することはできません。あなたはtemporary table

CREATE TEMP TABLE temp_grades AS 
SELECT school, grade FROM simulated_records; 
UPDATE temp_grades SET grade = 'A'; 

EDITをしたいように聞こえる:あなたのコメントを再:上記の副選択を使用して、テーブル操作からUPDATEを使用しています

UPDATE simulated_records 
FROM (SELECT id FROM simulated_records WHERE school='Yale' LIMIT 10) AS result 
SET grade='A' 
WHERE id = result.id 
RETURNING *; 

EDIT 2:第二のコメントについて:

あなたは誤植をしていないと仮定して、古いバージョンを持っている可能性があります。

UPDATE simulated_records SET grade = 'A' WHERE id IN 
    (SELECT id FROM simulated_records WHERE school = 'Yale' LIMIT 10); 
+0

実際に私がしたいのは更新です特定の基準を満たす元のテーブルの最初のn個の要素は、学校は「Yale」です。何か案が? – user1072706

+0

がもっと明確になっていますが、元の*テーブルを恒久的に変更したいのですか? – SpliFF

+0

はい、元のテーブルを永久に修正したい – user1072706

関連する問題