【发布时间】:2018-12-11 03:19:19
【问题描述】:
基本上,我正在尝试查找名称中没有 (GS) 或 (TD) 的产品。我尝试实现这个:
AND c.name NOT IN ('%(TD)%', '%(GS)%')
但这并没有过滤掉包含这些元素的名称,所以现在我要编写这段讨厌的代码:
AND c.name NOT LIKE '%(TD)%'
AND c.name NOT LIKE '%(GS)%'
我知道这是一个超出基本问题的问题,可能在这里的某个地方被问过,也许我在搜索时没有正确措辞。很想找到一种更有效地写这个的方法,这让我发疯了。
编辑:即使第二种方法是正确的,我也不明白下面的代码是如何工作的:
c.name IN ('%Jordan%', '%adidas%').
按照这个逻辑,为什么我原来的方法不能工作?毕竟,IN 运算符的全部目的是为了方便。
【问题讨论】:
-
你不喜欢第二个版本,因为它有两行?这是我认为最清晰的写法。
-
你的“讨厌的代码”是这个逻辑在 SQL 中的写法
-
你的两行陈述对我来说也正确,但我在这个线程上看到了一些其他选项:stackoverflow.com/questions/9393439/sql-query-with-not-like-in
-
同意:你做得对,但它冗长得令人讨厌。
-
您使用的是什么 DBMS?
ALL或ANY在某些情况下可能是一个捷径。