查找特定值的组合

Posted

技术标签:

【中文标题】查找特定值的组合【英文标题】:Finding combinations of specific values 【发布时间】:2016-12-14 13:33:32 【问题描述】:

我不知道如何编写下面的查询。

我的桌子是

col1 col2 
5   1
5   5
5   6
5   7
4   5
4   8
4   9
4   3
3   3
3   5

我需要选择不同的 col1 id,其中两个参数都存在于 col2 中。 例如。如果我发送 6,7 它应该发送给我 5

【问题讨论】:

请注意这不是递归查询。相应地更改标题。 谢谢,请建议一个标题,会做需要 您的问题应该提供实际的表定义(CREATE TABLE 语句)和您的 Postgres 版本。 【参考方案1】:

这可能是最快的解决方案之一:

SELECT col1  -- already DISTINCT?
FROM   tbl t1
JOIN   tbl t2 USING (col1)
WHERE  t1.col2 = 6
AND    t2.col2 = 7;

假设(col1, col2) 上有一个PRIMARY KEYUNIQUE 约束,就像它通常实现的那样。否则添加DISTINCT

还有很多其他方法可以实现关系除法。以下是一些:

How to filter SQL results in a has-many-through relation

【讨论】:

【参考方案2】:

试试:

SELECT col1
FROM mytable
WHERE col2 IN (6, 7)
GROUP BY col1
HAVING COUNT(DISTINCT col2) = 2

【讨论】:

(我希望 DISTINCT 是多余的。) 没有已知的唯一约束,因此需要 DISTINCT。

以上是关于查找特定值的组合的主要内容,如果未能解决你的问题,请参考以下文章

查找 JavaScript 数组值的所有组合(笛卡尔积)

PowerPivot Group By 以查找值的计数

jQuery 查找具有特定属性值的特定类

如何求和具有特定查找字段值的记录数

在 vb.net 中查找列表值的所有组合(笛卡尔积)

查找具有特定值的最新记录