需要帮助MySQL Query使用不喜欢

时间:2011-04-06 07:29:00

标签: mysql

我的表格以下列方式输入。

ID | Value
----------
1  | Apple
2  | Apple
2  | Grape

这里我想提取所有不应该有Apple的ID

现在,如果我们在查询中使用的不是'Apple',那么我们将获得ID 2,因为Grape就在那里。

所以我想知道有没有办法提取不应该有Apple的ID。

我不能使用子查询类的东西。 主要的是在我们的应用程序中,我们使用此查询作为通用的,意味着它应该支持所有过滤器(喜欢,不喜欢)。所以在这里我不能使用子查询。

先谢谢。

5 个答案:

答案 0 :(得分:1)

您可以使用子查询

select id from table 
where id not in (
                 select id from table  
                 where value ='Apple'
                )

答案 1 :(得分:1)

可能是:

select * from dataTable where value not like 'Apple' and id not in(select id from datatable where value like 'Apple')

但想知道不同值的重复ID ...

答案 2 :(得分:1)

......还有一个问题 -

SELECT id FROM fruits 
  GROUP BY id 
  HAVING COUNT(IF(value = 'Apple', 1, NULL)) = 0;

答案 3 :(得分:0)

其他人说的是,但使用DISTINCT关键字,即:

select distinct id from table 
where id not in (
                 select id from table  
                 where value ='Apple'
                )

答案 4 :(得分:0)

为了完整性,这里是EXIST版本

SELECT id 
FROM table t
WHERE NOT EXIST (
                 SELECT 1 
                 FROM table t2 
                 WHERE value ='Apple' AND
                       t1.id = t2.id
                )

(通常这些相关的子查询比不相关的对应物表现更差,但YMMV取决于数据模式,索引也可能产生数量级差异,即使在小集合上也是如此)

修改

您还可以查看此article以查看三种方法和一些推理之间的相似点和不同点(虽然结论不一定适用于您的情况 - 您有一个表,但它显示了如何分析;特别有趣的是比较Devart解决方案的计划和性能。)