【发布时间】:2015-12-13 13:18:33
【问题描述】:
我有以下 2 个表: SQL Tables
我有一个 id 列表 (1,2,3,4,5,6,7,8, ..., 10000)。 这些 id 的唯一组合被插入到另一个表中。
那么,如果我将 id 列表传递给搜索,我该如何找到这些独特的组合。
例如,我搜索 ARRAY([2,3,4])。该组合只存在于unique_combnation 1,所以结果如下:
1 3
1 2
1 4
没有任何包含 ID ARRAY([2,3,4]) 的 unique_comb。
如果我搜索[1,4],结果如下:
1 3
1 2
1 4
2 2
2 4
2 5
我该怎么做?我知道如何以不好的方式做到这一点:
- 创建临时表 t1
- 遍历给定的 id:
SELECT * FROM .. where id = ANY(ARRAY[1,4])并获取所有行,将所有行插入 t1。 - 然后按 unique_comb 对所有内容进行分组。
- 然后计算组数。如果唯一组合的数量不超过1,则返回唯一组合的id,否则(唯一组合> 1)不返回任何内容
这是一种用 1-2 条 sql 行实现的方法吗?我正在使用 postgresql 9.3
select unique_comb t2 where id = ANY(ARRAY[1, 4]) group by unique_comb ...
下面的答案是正确的。我只修改了一点查询,它就开始工作了。
它会从表唯一的东西中选择几个id。
select unique_comb, array_agg(id) t2 where id = ANY(ARRAY[1, 4]) group by unique_comb 的结果如下:
【问题讨论】:
-
你的第二个例子似乎没有意义。
标签: sql postgresql combinations postgresql-9.3