PostgreSQL - 从表中选择所有记录来自另一个记录的记录,并显示其他列

时间:2014-01-28 14:56:18

标签: sql postgresql

在开始时,我想说我不确定该主题的名称,所以如果有人建议改进它,请输入你的建议。

以下是我创建数据库结构的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
)

我创建了一个查询,根据“campaign_id”基于“campaign_id”来自“display_files”表选择文件来自“display_campaign”

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

有什么建议吗?

@Edit: files_id和files_display_length索引是相同的。这意味着files_display_length [0]是files_id [0]等的属性。

1 个答案:

答案 0 :(得分:1)

您需要加入这些表格。 display_campaign.files_id是否等于display_files.file_id?

SELECT df.*, files_display_length FROM display_files df join 
display_campaign dc on df.file_id = dc.files_id 
WHERE dc.campaign_id = '1'