首页 > 解决方案 > mysql查询-不在和/或之间的冲突

问题描述

我正在尝试从 A 特定类别中获取我所有的产品,并且没有这些类别中的某些产品。

我做了这个查询:

SELECT `ps_product`.`id_product`,`ps_product_lang`.`name` 
FROM `ps_product`, `ps_product_lang` 
WHERE  
    `ps_product`.`id_product` = `ps_product_lang`.`id_product`
    AND `ps_product`.`id_manufacturer` NOT IN (3,7,10,11,13,14,19,22,23,24,25,30,31,32,33,34,37,38,41,42,43,44,45,46,47,48,49,50) 
    AND `ps_product_lang`.`name` not in ( '%OLP%' ,'%LicSAPk%' ,'%SPLA%','%SA OLP%')

问题是我仍然得到带有字符串“SPLA”或“SA OLP”的产品——因为 NOT IN 与类别冲突

如何解决?

标签: mysqlsqljoinnotinsql-in

解决方案


运算符IN用于精确匹配一个值,而不是部分匹配一个值列表。所以你不能使用通配符,比如'%'.
您必须LIKE对每个值使用运算符:

AND `ps_product_lang`.`name` not like '%OLP%' 
AND `ps_product_lang`.`name` not like '%LicSAPk%' 
AND `ps_product_lang`.`name` not like '%SPLA%'
AND `ps_product_lang`.`name` not like '%SA OLP%'

推荐阅读