sqlite查询以特殊条件过滤掉一些数据

时间:2012-10-20 12:01:54

标签: sqlite

以下是我拥有的数据示例:

-----------------------------------
 ID | Item                 | Value
  1 | Carrot               |  0
  2 | Carrot               |  1
  3 | Peas                 |  1
  4 | Peas                 |  2
  5 | Peas                 |  3
  6 | Salad                |  0
  7 | Salad                |  3
  8 | Salad                |  5
  9 | Corn                 |  0
-----------------------------------

如果符合以下条件,我想进行查询,其中显示值为0的行:

  • 他们是该项目的唯一价值
  • 该项目的其他值不止一个

或者另一种说法是,如果出现以下情况,他们不应该出现在结果中:

  • 同一项目只有一个且只有一个其他值

请注意,对(item,value)在我的数据中是唯一的。

因此,对于数据样本,查询结果应该是这样的(只有第一行消失):

-----------------------------------
 ID | Item                 | Value
  2 | Carrot               |  1
  3 | Peas                 |  1
  4 | Peas                 |  2
  5 | Peas                 |  3
  6 | Salad                |  0
  7 | Salad                |  3
  8 | Salad                |  5
  9 | Corn                 |  0
-----------------------------------

最好和最有效的方法是什么?

1 个答案:

答案 0 :(得分:3)

您必须按项目对数据进行分组,因此有一种可能性

SELECT ID, Item, Value 
FROM data 
WHERE Value <> 0
OR Item IN
  (SELECT Item FROM data
   GROUP BY Item
   HAVING COUNT(*) <> 2);

See this SQLFiddle