2012-10-20 100 views
0

下面是数据的样本,我有: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值线出现,如果:

  • 它们是该项目的唯一价值
  • 有该项目

或另一种方式不止一个其他值说是他们不应该在结果,如果:

  • 有一个且只有一个同样项目

注意,对(项,值)是我唯一的数据的其他价值。

所以对于数据样本,查询的结果应该是这样的(仅第一行会消失):

----------------------------------- 
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 
----------------------------------- 

什么是做到这一点的最好和最有效的方法是什么?

回答

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

+0

完美。 – Matthieu