多个“不像”条件的Where语句

12

我正在尝试编写以下语句:

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

翻译:选择字段包含“Pandora”但不包含“radio”、“digital”或“internet”的内容。

有没有一种方法在语句中不使用三次“Not Like”和AND连接符的情况下编写它?

谢谢。

3个回答

14
如果“field”不仅是单个单词,则需要执行以下操作:
SELECT * FROM table WHERE field LIKE '%Pandora%' AND field NOT LIKE '%radio%' AND field NOT LIKE '%internet%' and field NOT LIKE '%digital%';

8
首先,您的查询是冗余的,因为如果fieldLIKE'pandora',那么其他条件默认会返回false。 field不可能等于'Pandora''radio''digital''internet'
因此,您可以使用以下示例简化查询:
SELECT *
  FROM example
 WHERE field = 'Pandora';

如果这两个条件代表两个独立的字段,那么您可以使用 REGEXP 运算符来强制实施 DRY 原则,同时仍允许进一步的 模式匹配
SELECT *
  FROM example
 WHERE field_1 = 'Pandora'
   AND field_2 NOT REGEXP '^(radio|digital|internet)$';

3

如果您正在搜索特定的单词,您可以使用NOT IN()

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

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


1
如何制作“喜欢”?例如:链接不在 - KingRider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接