【发布时间】:2016-04-25 07:42:22
【问题描述】:
我有一个具有下一个结构的表:
Data structure:
| CONTRACT | CONNECTION | STATE |
| 1 | AAA | Y |
| 2 | AAA | Y |
| 3 | BBB | N |
| 4 | BBB | N |
| 5 | BBB | N |
| 6 | BBB | N |
| 7 | AAA | Y |
| 8 | CCC | Y |
| 9 | CCC | N |
| 10 | AAA | Y |
| 11 | CCC | N |
我想选择所有行/数据,考虑到由 CONNECTION 列定义为组 AAA、BBB 和 CCC 的组,查询必须仅选择具有状态的 所有 行的组值为“N”的列,但始终考虑该组的所有数据。 所以桌子上的结果是:
Result needed:
| CONTRACT | CONNECTION | STATE |
| 3 | BBB | N |
| 4 | BBB | N |
| 5 | BBB | N |
| 6 | BBB | N |
我一直在寻找解码、存在等功能,但只是不知道如何解决这个问题。
知道如何为此目的编写查询吗?
【问题讨论】:
-
非常感谢大家。我试过 Felix Pamittan 答案,效果很好。
-
所有 3 种解决方案都应该工作,但 Giorgos Betsos' Answer 只会扫描表/索引一次,而使用
IN或NOT EXISTS并且相关的子查询将扫描子中的表/索引查询和外部查询,可能会做更多的 IO。如果您查看两个查询的解释计划,您可以自己计算表(或索引)扫描的数量,并可以查看每个解决方案的不同 IO 量。
标签: sql oracle group-by subquery