我试图得到我所有的产品,从一个特定的类别,没有一些产品从这些类别。
我做了这个查询:
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'的产品,因为它们与类别不冲突
如何解决?
2条答案
按热度按时间ikfrs5lh1#
作为初学者:始终使用标准连接(与
on
关键字)而不是老式的隐式连接(在from
子句):这种旧语法在几十年前就不受欢迎了,不应该在新代码中使用。然后:你需要多个
like
条件而不是in
. 如果有许多值,regexp匹配可以方便地缩短语法:注意,我使用了表别名来缩短语法。我还删除了标识符周围的反勾号:大多数情况下它们是不需要的,只是使查询不那么容易理解(如果这会导致问题,可以将它们添加回去)。
thigvfpy2#
接线员
IN
用于精确匹配值,而不是部分匹配值列表。所以你不能像这样使用通配符'%'
.你得用接线员
LIKE
对于每个值: