2017-04-23 16 views
0

陣列分成數行運行此查詢:如何在PostgreSQL

SELECT id,selected_placements 
    FROM app_data.content_cards 

我得到一個表是這樣的:

+----+-------------------------------+ 
| id | selected_placements   | 
+----+-------------------------------+ 
| 90 | {162,108,156,80,163,155,NULL} | 
+----+-------------------------------+ 
| 91 | {}       | 
+----+-------------------------------+ 

我現在要做的就是讓這相同的信息,但陣列分割成行,所以我得到這樣的結果:

+----+---------------------+ 
| id | selected_placements | 
+----+---------------------+ 
| 90 | 162     | 
+----+---------------------+ 
| 90 | 108     | 
+----+---------------------+ 
| 90 | 156     | 
+----+---------------------+ 
| 90 | 80     | 
+----+---------------------+ 
| 90 | 163     | 
+----+---------------------+ 
| 90 | 155     | 
+----+---------------------+ 

正如你所看到的,我不想讓「seleclec」 ted_placements」。

我正在使用PostgreSQL 8.0.2。

非常感謝!

+1

我很困惑。我認爲Redshift不支持數組:http://docs.aws.amazon.com/redshift/latest/dg/c_unsupported-postgresql-datatypes.html。 –

+0

你是對的@GordonLinoff在這種情況下,它只是PostgreSQL 8.0.2我正在使用的。剛剛編輯出來。 – Henry

回答

1

我建議你升級你的Postgres版本。所有受支持版本支持unnest()

SELECT x.* 
FROM (SELECT id, UNNEST(selected_placements) as selected_placement 
     FROM app_data.content_cards 
    ) x 
WHERE selected_placement IS NOT NULL; 

在早期版本中,你可以努力挑選出來一次一個。以下是測試和工程,儘管在9.5:

with content_cards as (
    select 1 as id, array['a', 'b', 'c'] as selected_placements 
    ) 
SELECT id, selected_placements[num] as selected_placement 
FROM (SELECT cc.*, generate_series(1, ccup.maxup) as num 
     FROM content_cards cc CROSS JOIN 
      (SELECT MAX(ARRAY_UPPER(cc.selected_placements, 1)) as maxup 
      FROM content_cards cc 
      ) ccup 
    ) x 
WHERE selected_placements[num] IS NOT NULL; 
+0

謝謝你這個快速的回答。運行查詢時出現此錯誤https://screencast.com/t/uBL3cGwt爲了給您一些背景知識,當我檢查我們使用的數據庫版本時,這是我得到的:版本PostgreSQL 8.0.2在i686-pc- linux-gnu,由GCC gcc編譯(GCC)3.4.2 20041017(Red Hat 3.4.2-6.fc3),Redshift 1.0.1232。據我所知,我正在閱讀Redshift的所有數據(使用SQLWorkbenchJ),但實際上它來自我們單獨使用的Postgresql數據庫。兩個dbs之間的同步是通過stitchdata.com完成的。非常感謝你! – Henry

+0

我已經在一個單獨的環境中檢查了PostgreSQL 9.4.7。而unnest()的答案完美無缺。我已經提出了答案,但如果我能爲我遇到的其他錯誤獲得解決方案,那將是非常好的。謝謝! – Henry