用查询拉入重复项

时间:2017-12-30 16:05:31

标签: postgresql

我目前正在尝试根据另一个表中列中找到的数组的内容拉入一些行。到目前为止,我有:

SELECT * FROM coaches WHERE id = ANY(SELECT unnest({23,23,13}) FROM stations WHERE id = 1

一切都很好,但我只回到23号的一个条目。我假设这是为了减少重复,但我实际上想要重复。我想要数字23的所有数据两次,然后数字13一次,以匹配{23,23,13}数组。我也希望它以相同的顺序到达。

希望这是有道理的......任何帮助都会很棒。我是新手,很抱歉,如果它很明显。

1 个答案:

答案 0 :(得分:2)

我认为您需要这样的查询。

 SELECT * FROM 
 ( SELECT unnest(coach_ids) as coach_id FROM  
     stations  WHERE id = 1 ) s WHERE EXISTS ( select id FROM coaches c
                                 where c.id = s.coach_id ) ;

DEMO

编辑

你说,

  

我似乎只能获得数组ID,但没有数据。

在这种情况下你应该使用JOIN。为了维护正确的ORDER,您可以使用generate_subscripts()UNNEST

SELECT c.* FROM 
 ( SELECT unnest(coach_ids) as coach_id
  ,generate_subscripts(coach_ids, 1) AS idx FROM  
     stations  WHERE id = 1 ) s  JOIN  coaches c
                                 ON  c.id = s.coach_id
                                 ORDER BY s.idx; 

DEMO2

相关问题