在开始我想说,我不知道主题的名称,所以如果任何人有建议改进它,请输入您的建议。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