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

PostgreSQL如何让IN查询返回与输入条数匹配的全部关联值

解决PostgreSQL中IN查询结果与输入条目数匹配的问题

默认的WHERE IN查询只会返回原表中符合条件的唯一行,哪怕你在IN里写了重复的id,数据库也不会重复输出对应的结果——这就是你例子里只得到4个结果的原因,SELECT ALL在这里起不到作用,因为它控制的是是否去重查询结果的列,而不是匹配IN里的重复输入。

要让结果条数和IN条件里的输入条目数一致,得换一种查询思路:把你要传入的id列表变成一个带重复项的临时数据集,再和原表做关联查询,这样每个输入的id都会对应一条结果。

方法一:用VALUES子句生成临时数据集

这是最简洁的写法,直接把所有id放到VALUES里,再和原表JOIN:

SELECT l."letter"
FROM (VALUES ('1'), ('2'), ('3'), ('4'), ('1'), ('2')) AS input_ids(id)
JOIN "letters" l ON l.id = input_ids.id;

方法二:用UNION ALL拼接多个SELECT

如果VALUES子句用着不习惯,也可以用UNION ALL把每个id的查询拼接起来,再关联原表:

SELECT l."letter"
FROM (
  SELECT '1' AS id UNION ALL
  SELECT '2' AS id UNION ALL
  SELECT '3' AS id UNION ALL
  SELECT '4' AS id UNION ALL
  SELECT '1' AS id UNION ALL
  SELECT '2' AS id
) AS input_ids
JOIN "letters" l ON l.id = input_ids.id;

这两种方法都会保留你输入的重复id,然后每一条id都能从原表中匹配到对应的letter,最终结果就会和你期望的一致:A, B, C, D, A, B。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:02:05