Postgresql
試圖了解如何使用 postgresql generate_series() 進行此操作
首先,我來自這個問題,建議我使用 generate_series() ,但是在我的數據庫中進行了一些調整後,我真的不明白如何創建這樣的句子這是老問題:填充一個應該有一個表X 行的預設值與大插入查詢?或者它可以預設以某種方式完成?
但我將再次改寫這個問題:
這些是我的初始表格
Users
: id(int) PK,week_to_live(int)Calendar
: id(int) PK, user_id (int) (FK -> Users(id))*CalendarField
: id(int) PK, text(text), rating(int), calendar_id(int) (FK ->Calendar(id))*, week_number(int)重點是,當我在我的應用程序中生成日曆時,實際上我的使用者和日曆表會正確填寫。在一代人之後,他們最終會看起來像這樣
users
id weeks_to_live 1 3 2 2
calendar
id user_id 1 1 2 2
那部分很好,但我也需要自動生成我的 CalendarField 表,這應該是 generate_series() 應該起作用的地方,所以它們最終看起來像這樣
CalendarField
id text rating calendar_id week_number 1 '' 0 1 0 2 '' 0 1 1 3 '' 0 1 2 4 '' 0 2 0 5 '' 0 2 1
如您所見:
id
: 是自增的text
:始終預設為“”,rating
:始終預設為 0,calendar_id
(fk) : 是與每個日曆的關係,日曆欄位的行數等於 users 中最多 week_to_live 的數量week_number
: 這個數字,應該從 0 開始,並且當它 < 比 users 表中的 week_to_live 時保持遞增現在我的問題是,如何生成最後一個插入,以便我的 CalendarField 表最終填充該資訊?我想通過生成系列,我不需要創建一個帶有 == week_to_live 值的巨大插入,以防它變得巨大。但我不明白該怎麼做。
還是我應該做一個巨大的插入呢?
您需要加入
users
,calendar
然後使用generate_series()
.insert into calendar_field (text, rating, calendar_id, week_number) select '', 0, c.id, g.wn from calendar c join users u on u.id = c.user_id cross join generate_series(0, u.weeks_to_live) as g(wn);