我正在使用 MySQL Data Compare比较本地和远程 mysql 数据库。
我正在尝试设置一个简单的 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 子句(因为这都是由软件生成的)。
最佳答案
没有用于与多个模式进行比较的 LIKE
形式。
正如@vkp 在评论中提到的(我不知道他们为什么不发布答案),您的条件不会按照您的意图进行:
WHERE option_name NOT LIKE '%_transient_%' OR '%mm%'
这不是 MySQL 中的语法错误,因为 OR
可以使用任何表达式作为操作数。零值计为假,非零值计为真。所以你的条件等同于:
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%'
关于mysql WHERE CLAUSE 根据同一列中的两个不同值排除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41048794/