我目前正在尝试根据另一个表中列中找到的数组的内容拉入一些行。到目前为止,我有:
SELECT * FROM coaches WHERE id = ANY(SELECT unnest({23,23,13}) FROM stations WHERE id = 1
一切都很好,但我只回到23号的一个条目。我假设这是为了减少重复,但我实际上想要重复。我想要数字23的所有数据两次,然后数字13一次,以匹配{23,23,13}
数组。我也希望它以相同的顺序到达。
希望这是有道理的......任何帮助都会很棒。我是新手,很抱歉,如果它很明显。
答案 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 ) ;
编辑:
你说,我似乎只能获得数组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;