2012-10-30 103 views
1

時,我有創建使用創建表一個表,並與這些列:多行錯誤填充表

create table myschema.mytable(
    id serial PRIMARY KEY, 
    row_num integer, 
    col_num integer, 
    pix_centroid geometry, 
    pix_val double precision 
) 

當我試圖填充它:

insert into pixelbased (id, row_num, col_num, pix_centroid, pix_val) 
values (
    DEFAULT, 
    (select((ST_PixelAsPolygons(rast, 1)).x) from mytable where rid=3), 
    (select((ST_PixelAsPolygons(rast, 1)).x) from mytable where rid=3), 
    (select(ST_Centroid((ST_PixelAsPolygons(rast, 1)).geom)) from rwanda8 where rid=3), 
    (select(ST_PixelAsPolygons(rast, 1)).val from mytable where rid=3) 
) 

我遇到以下錯誤:

錯誤:由用作表達式的子查詢返回多於一行的行。

我知道,因爲我有不止一行的每列,這是有道理的有這樣的錯誤。但我真的需要按照提及的方式計算所有列。任何人都知道我該怎麼辦? 其實我想結果插入表中以下查詢:

select 
    (ST_PixelAsPolygons(rast, 1)).val as geomval1, 
    (ST_PixelAsPolygons(rast, 1)).x as X, 
    (ST_PixelAsPolygons(rast, 1)).y as Y, 
    (ST_Centroid((ST_PixelAsPolygons(rast, 1)).geom)) as geom 
from rwanda8 
where rid=3 

任何人都知道我應該怎麼辦?

回答

2

只需使用select查詢中,而不是values

insert into pixelbased (row_num, col_num, pix_centroid, pix_val) 
select 
    (ST_PixelAsPolygons(rast, 1)).val as geomval1, 
    (ST_PixelAsPolygons(rast, 1)).x as X, 
    (ST_PixelAsPolygons(rast, 1)).y as Y, 
    (ST_Centroid((ST_PixelAsPolygons(rast, 1)).geom)) as geom 
from rwanda8 where rid=3 

不要插入ID,因爲它是一個串行和將產生本身。

+0

謝謝你Clodoaldo。它爲我工作。如果我想推廣查詢以包含所有的rid值,應該怎麼做?我想爲每個具有不同名稱的rid分別設置'(ST_PixelAsPolygons(rast,1)).val as geomval1'。列數超過1000個,我無法手動完成。 –

+1

@ f.ashouri如果你有超過1000列,那麼你做錯了。創建另一個問題並解釋你的數據,要求它正常化。 –

+0

對不起,我有1000多個ROWS,每個人都有特定的擺脫。我認爲現在很清楚。我想爲每個擺脫單獨的_geomval_列。 –

2

其中一個子查詢返回多於1行。因此,使用LIMIT 0,1或其他東西來獲得每個子查詢只有一個值。

如果您需要每列超過1個值,則應該檢查插入算法並使用遊標作爲實例。

+0

實際上我的所有列都返回多行。我想要在表中查詢結果(我剛剛編輯並在問題中添加了查詢)。你能幫助我嗎? –