You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中使用WHERE IN子句时如何保留重复ID对应的行

PostgreSQL中保留IN子句重复ID对应的查询结果行

当使用WHERE id IN (list)时,PostgreSQL只会返回原表中匹配ID的唯一行——因为IN的逻辑是判断"id是否存在于列表中",不管列表里重复多少次,只要原表对应ID只有一行,就只会返回一次。

要让重复ID对应的行也重复出现在结果里,直接用IN做不到,但可以用以下两种PostgreSQL原生方法实现:

方法一:使用VALUES子句+JOIN(推荐)

通过VALUES子句构建包含重复ID的临时数据集,再和原表做JOIN,这样每个重复的ID都会匹配一次原表数据,得到重复的结果行:

SELECT t.*
FROM your_table t
JOIN (VALUES (102), (103), (103), (104)) AS v(id) 
  ON t.id = v.id;

这种方法适合ID列表较长的场景,写法简洁易维护。

方法二:使用UNION ALL拼接查询

对每个ID单独写SELECT语句,用UNION ALL(注意不是UNION,UNION会自动去重)拼接结果:

SELECT * FROM your_table WHERE id = 102
UNION ALL
SELECT * FROM your_table WHERE id = 103
UNION ALL
SELECT * FROM your_table WHERE id = 103
UNION ALL
SELECT * FROM your_table WHERE id = 104;

这种方法逻辑直观,但ID数量多的时候代码会比较冗长。

内容的提问来源于stack exchange,提问作者LVerwolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:12:34