我正在尝试编写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
的唯一组合
如果问题不明确,请告诉我。
由于
答案 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
,且没有其他值。