多个'不喜欢'的声明

时间:2013-10-25 00:33:49

标签: mysql sql sql-server

我正在尝试撰写以下声明:

WHERE field LIKE 'Pandora' and field Not Like 'radio', 'digital', internet';

翻译:选择Pandora字段的位置,而不是广播,数字或互联网。

有没有办法编写这个语句,而不用中间的AND编写Not Like 3次?

谢谢

3 个答案:

答案 0 :(得分:5)

如果"字段"不只是单个单词,你需要做这样的事情:

select * from table where field like '%Pandora%' and field not like '%radio%' and field not like '%internet%' and field not like '%digital%';

答案 1 :(得分:3)

如果您要搜索特定字词,可以使用NOT IN()

WHERE field LIKE 'Pandora' AND field NOT IN('radio', 'digital', 'internet');

如果您在搜索中需要通配符%,则需要使用多个LIKE

答案 2 :(得分:0)

首先,您的查询是多余的,因为如果fieldLIKE 'pandora',则默认情况下其他条件将返回false。

不可能field等于'Pandora''radio''digital''internet'

因此,您可以使用以下示例简化查询:

SELECT *
  FROM example
 WHERE field = 'Pandora';

如果两个条件代表两个单独的字段,则可以使用REGEXP运算符强制执行DRY principle,同时仍然允许进一步的pattern matching

SELECT *
  FROM example
 WHERE field_1 = 'Pandora'
   AND field_2 NOT REGEXP '^(radio|digital|internet)$';