sql查询查找列数据的唯一组合

时间:2014-01-17 01:31:11

标签: mysql sql

我正在尝试编写sql查询,它将从表中选择不同的列组合。

示例表数据:

+--+---+---+---+
|id|fk1|fk2|fk3|
+--+---+---+---+
|1 |1  |2  |3  |
+--+---+---+---+
|2 |1  |3  |3  |
+--+---+---+---+
|3 |2  |2  |3  |
+--+---+---+---+
|4 |2  |4  |3  |
+--+---+---+---+
|5 |3  |2  |3  |
+--+---+---+---+
|6 |3  |3  |3  |
+--+---+---+---+
|7 |3  |4  |3  |
+--+---+---+---+

在这里,我需要编写一个返回fk1 => 2的查询,因为它具有fk2 => 2 and 4的唯一组合

如果问题不明确,请告诉我。

由于

1 个答案:

答案 0 :(得分:1)

我明白了。值“2”和“4”是查询的输入,您只需要该组合。这是一个set-within-sets查询,我认为使用having子句进行聚合是最灵活的方法。

select fk1
from table t
group by fk1
having sum(fk2 = 2) > 0 and
       sum(fk2 = 4) > 0 and
       sum(fk2 not in (2, 4)) = 0;

即,密钥fk1的值为2(至少一次),值为4,且没有其他值。