这是我的查询:
SELECT *
FROM client_info
WHERE (cid LIKE 'G%' OR cid LIKE 'H%' OR cid LIKE 'J%')
AND (client_name NOT LIKE 'P4%' OR client_name NOT LIKE 'P5%')
结果仍然包含以 P4 和 P5 开头的客户端名称。NOT LIKE 子句有什么问题?
将第二组更改OR
为AND
.
AND (client_name NOT LIKE 'P4%' AND client_name NOT LIKE 'P5%')
其他人已经给了你正确的答案——你需要使用 AND 而不是 OR。但值得理解为什么。以一个名为 P5_JONES 的客户为例 - 为什么这个病人会出现在列表中?因为它的名字不像'P4%'。是的,它就像 P5%,但是其中有一个 OR,只有其中一个表达式需要为真才能满足条件。
您必须在 NOT LIKE 条件下使用 AND 而不是 OR
试试这个:
选择 * FROM client_info WHERE (cid LIKE 'G%' OR cid LIKE 'H%' OR cid LIKE 'J%') AND (client_name NOT LIKE 'P4%' AND client_name NOT LIKE 'P5%')
您必须使用 AND 而不是 OR 运算符。因为您使用 NOT LIKE so,所以您必须检查任一条件。