我的表格以下列方式输入。
ID | Value
----------
1 | Apple
2 | Apple
2 | Grape
这里我想提取所有不应该有Apple的ID
现在,如果我们在查询中使用的不是'Apple',那么我们将获得ID 2,因为Grape就在那里。
所以我想知道有没有办法提取不应该有Apple的ID。
我不能使用子查询类的东西。 主要的是在我们的应用程序中,我们使用此查询作为通用的,意味着它应该支持所有过滤器(喜欢,不喜欢)。所以在这里我不能使用子查询。
先谢谢。
答案 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解决方案的计划和性能。)