使用查询拉入重复项

Posted

技术标签:

【中文标题】使用查询拉入重复项【英文标题】:Pull in duplicates with query 【发布时间】:2017-12-30 16:05:30 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

 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。为了保持正确的顺序,您可以使用 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

【讨论】:

感谢您的代码。我似乎只返回了数组 ID,没有数据...select id FROM coaches c where c.id = s.coach_id我在选择中将 id 换成了 *,但没有乐趣...select * FROM coaches c where c.id = s.coach_id @Action_Turtle :使用新查询进行编辑。检查它是否适合您并告诉我。 我只是在看 JOIN @kaushik-nayak ,因为我认为这是必要的!我现在已经实现了你的代码,它的工作原理是不尊重顺序。它按 ID 的顺序返回,例如 1,2,3,4 而不是 3,2,4,1... 非常接近,感谢您的努力! @Action_Turtle :不客气,新年快乐。如果您感谢我的努力,请投票给答案。谢谢! 嗨@KaushikNayak 会的。但是你知道如何保持秩序吗?

以上是关于使用查询拉入重复项的主要内容,如果未能解决你的问题,请参考以下文章

查询未拉入选择框值,oracle

Django 使用查询集和正则表达式查找重复项

如何删除 Access 表中的重复项(不使用查询)?

sql SQL查询使用单个值查找表中的重复项。

PDO:删除查询结果的重复项[重复]

查询删除重复项