mysql WHERE CLAUSE根据同一列中的两个不同值排除行

时间:2016-12-08 21:06:17

标签: mysql sql

我使用MySQL Data Compare来比较本地&远程mysql db。
我试图设置一个简单的WHERE子句,该子句排除比较中包含以下值的任何行:

%mm%transient%

我使用的WHERE子句似乎无法正常工作。

'option_name' NOT LIKE '%_transient_%' OR '%mm%'

正在运行的完整查询是:

SELECT 'option_id', 'option_name', 'option_value', 'autoload' 
FROM 'wp_options WHERE 'option_name' NOT LIKE '%_transient_%' OR '%mm%' 

结果输出不会排除option_name列中包含mm_transient_的行。

这里需要注意的是,我仅限于使用WHERE子句&我无法编辑导致它的SELECT子句(因为它全部由软件生成)。

1 个答案:

答案 0 :(得分:2)

没有LIKE形式可用于比较多种模式。

正如@vkp在评论中提到的(我不知道他们为什么不发表答案),你的情况不符合你的意图:

WHERE option_name NOT LIKE '%_transient_%' OR '%mm%' 

这不是MySQL中的语法错误,因为OR可以使用任何表达式作为操作数。零值计为false,非零值计为true。所以你的情况相当于:

WHERE (option_name NOT LIKE '%_transient_%') OR ('%mm%')

这在逻辑上等同于:

WHERE (option_name NOT LIKE '%_transient_%') OR (true)

每一行都是如此,因为真值OR'和任何其他表达式将导致为真。

你的情况应该是这样的:

WHERE option_name NOT LIKE '%_transient_%' AND option_name NOT LIKE '%mm%'