需要使用not like进行MySQL查询的帮助吗

需要使用not like进行MySQL查询的帮助吗,mysql,Mysql,我的表中有以下方式的条目 ID | Value ---------- 1 | Apple 2 | Apple 2 | Grape 在这里,我想提取所有不应该有苹果的ID 现在如果我们在查询中使用notlike'Apple',那么我们将得到ID 2,因为那里有葡萄 所以我想知道有没有办法提取苹果公司不应该有的ID 我不能使用子查询之类的东西。 最主要的是在我们的应用程序中,我们将此查询用作通用查询,这意味着它应该支持所有过滤器(Like,notlike)。所以这里我不能使用子查询 提前感谢

我的表中有以下方式的条目

ID | Value
----------
1  | Apple
2  | Apple
2  | Grape
在这里,我想提取所有不应该有苹果的ID

现在如果我们在查询中使用notlike'Apple',那么我们将得到ID 2,因为那里有葡萄

所以我想知道有没有办法提取苹果公司不应该有的ID

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


提前感谢。

您可以使用子查询

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

您可以使用子查询

select id from table 
where id not in (
                 select id from table  
                 where value ='Apple'
                )
可能是:

select * from dataTable where value not like 'Apple' and id not in(select id from datatable where value like 'Apple')
但是不同值的重复id…

可能是:

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

但是想知道不同值的重复id…

其他人说了什么,但是使用了不同的关键字,即:

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

其他人说了什么,但使用了不同的关键字,即:

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

…还有一个问题-

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

…还有一个问题-

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

为了完整起见,这里有一个EXIST版本

SELECT id 
FROM table t
WHERE NOT EXIST (
                 SELECT 1 
                 FROM table t2 
                 WHERE value ='Apple' AND
                       t1.id = t2.id
                )
(通常,这些相关子查询的性能比不相关子查询差,但YMMV根据数据模式的不同,索引可能会产生数量级的差异,即使在小集合上也是如此)

编辑:


您还可以检查这一点,以查看三种方法之间的相似性和差异以及一些推理(尽管结论不一定适用于您的案例-您有一个表,但它显示了如何分析;特别有趣的是比较Devart解决方案的计划和性能).

为了完整起见,这里提供了现有版本

SELECT id 
FROM table t
WHERE NOT EXIST (
                 SELECT 1 
                 FROM table t2 
                 WHERE value ='Apple' AND
                       t1.id = t2.id
                )
(通常,这些相关子查询的性能比不相关子查询差,但YMMV根据数据模式的不同,索引可能会产生数量级的差异,即使在小集合上也是如此)

编辑:


您还可以检查这一点,以查看三种方法之间的相似性和差异以及一些推理(尽管结论不一定适用于您的案例-您有一个表,但它显示了如何分析;特别有趣的是比较Devart解决方案的计划和性能).

您不需要像“苹果”一样在外部添加
值query@Shakti,这是真的,但它可能会加快速度—允许查询计划器执行将更早地修剪某些记录的操作,而无需使用更昂贵的(即使它不是相关的子查询)不IN@Unreason:添加完全不需要的更多条件。加快速度?@Shakti Singh:是的。试试看。推理是这样的:假设比较
不象“苹果”
不在(选择…
)快n倍(一个是varchar字段和常量的比较,另一个需要遍历临时构建的表或执行索引子查询,比较计划)。因此,这种附加的和不必要的条件有可能在不使用更昂贵的记录的情况下尽早丢弃记录。不过,为了证明这一点,你需要有一定比例的“早期苹果”案例,因此它确实取决于统计数据(因此我说它可能会加快速度)。你不需要像“苹果”一样在你的产品中添加
值query@Shakti是这样的,,但它可能会加快速度—允许查询计划器执行将更早地删除某些记录的操作,而无需使用更昂贵的(即使它不是相关的子查询)IN@Unreason:添加完全不需要的更多条件。加快速度?@Shakti Singh:是的。试试看。推理是这样的:假设比较
不象“苹果”
不在(选择…
)快n倍(一个是varchar字段和常量的比较,另一个需要遍历临时构建的表或执行索引子查询,比较计划)。因此,这种附加的和不必要的条件有可能在不使用更昂贵的记录的情况下尽早丢弃记录。不过,为了证明这一点,你需要有一定比例的“早期苹果”案例,因此这取决于统计数据(因此我说这可能会加快速度)。目前还不清楚这是否是一条好途径。对DISTINCT的需求取决于数据的未来使用。是的,要获得正确的集合(无重复元素),您确实需要它。然而,DISTINCT很昂贵,不应该自动加入(通常您会通过适当的设计来避免它;在这种情况下,重复id的建议不好的设计和可能需要DISTINCT,仍然应该仔细考虑)不清楚这是否是一条好路。对DISTINCT的需求取决于数据的未来使用。是的,要获得正确的集合(无重复元素),您确实需要它。然而,DISTINCT很昂贵,不应该自动加入(通常您会通过适当的设计来避免它;在这种情况下,重复id建议糟糕的设计和可能需要DISTINCT,但仍然应该仔细考虑)将非唯一字段命名为“ID”是错误的做法。将非唯一字段命名为“ID”是错误的做法。