在開始我想說,我不知道主題的名稱,所以如果任何人有建議改進它,請輸入您的建議。PostgreSQL - 從表中知道記錄ID從另一個表中選擇所有記錄,並顯示其他列
這裏是我的SQL查詢來創建數據庫的結構完全一樣礦山:
CREATE TABLE display_campaign (
files_id integer[] DEFAULT '{-1}' NOT NULL,
campaign_id integer NOT NULL,
files_display_length integer[] DEFAULT '{-1}' NOT NULL
)
CREATE TABLE display_files (
file_id integer NOT NULL,
files_source text NOT NULL,
files_display_name text NOT NULL
)
我已經創建了一個從「display_files」表中根據「files_id」 FROM「display_campaign」選擇我的文件查詢基於 「CAMPAIGN_ID」
SELECT * FROM "display_files" WHERE array["file_id"] && ANY(SELECT "files_id" FROM "display_campaigns" WHERE "campaign_id" = '1')
實施例結果表看起來像
file_id | file_source | file_display_name
--------+-----------------+------------------
1| {PLAYLIST}/1.mp4| ADV1
3| {PLAYLIST}/2.mp4| ADV2
我喜歡那樣:
file_id | file_source | file_display_name|file_display_length
--------+-----------------+------------------+-------------------
1| {PLAYLIST}/1.mp4| ADV1| 10000
3| {PLAYLIST}/2.mp4| ADV2| 17000
有什麼建議嗎?
@編輯: files_id和files_display_length索引是相同的。這意味着files_display_length [0]是files_id [0]的屬性等。
是否有你在'display_campaign'內使用file_ids數組而不是每個文件都與其活動關聯的原因?會使查詢和結構更容易,更不容易出錯IMO。這看起來有點像過度複雜的事情,我們不知道結構背後的原因。 – DrColossos
每個廣告系列都有幾個文件可以顯示。這就是爲什麼它是一個數組。 – Doro
我看到,更常見的多對多表格方法看起來像是對問題的更好解決方案,並且會產生更好,或許更有效的查詢。 – DrColossos