次のクエリから期待される結果を取得するにはどうすればよいですか。現在、postgres ではサポートされていません。ここにリンクの説明を入力してください (互換性に関する最後のセクションを参照してください)。
UPDATE accounts SET (contact_last_name, contact_first_name) = (SELECT last_name, first_name FROM salesmen WHERE salesmen.id = accounts.sales_id);
実際には、新しい空の列をテーブルに追加し、別のテーブル/ビューから同じサイズとタイプの列のコンテンツを入力しています
do $$DECLARE
k record;
_current_view text := '';
_current_var text := '';
_new_column_sql text := '';
_insert_sql text := '';
_select_sql text := '';
begin
for k in SELECT column_name from information_schema.columns where table_name='train'
and column_name <> 'action'
loop
_current_view := 'av_' || k.column_name;
_current_var := k.column_name;
_new_column_sql := 'alter table train_average_imputed add column ' || _current_var || ' float';
_select_sql := 'select prob as ' || _current_var || ' from ' || _current_view || ', train
where train.' || _current_var || '=' || _current_view || '.' || _current_var ;
_insert_sql := 'insert into train_average_imputed(' || _current_var || ') ' || _select_sql;
raise notice '%', _select_sql;
--EXECUTE _test_sql;
EXECUTE _new_column_sql;
EXECUTE _insert_sql;
exit;
end loop;
end$$;
ありがとう。
アップデート
実際には行番号に沿って更新する必要があります。これを使用してみました
drop table play2;
create table play2 as (select action from play);
alter table play2 add column color text;
with trans_table as(select color, row_number() over() as rn from play2)
update trans_table set color = a.color from (
select color, row_number() over() as rn from play) as a
where trans_table.rn =a.rn;
しかし、次のエラーが発生しました
DROP TABLE
SELECT 100
ALTER TABLE
ERROR: relation "trans_table" does not exist
LINE 2: update trans_table set color = a.color from (
^
私のコードがpostgreswith
ページのリンクの説明をここに入力してください。の後にクエリのselect
代わりに aを使用すると、期待される結果が返されることに注意してください。update
with
更新 2
Igor が示唆したように、テーブルをコピーしてそこから列を追加するだけで済みました。