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

标签 mysql sql

我正在使用 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/

相关文章:

PHP Undefined Index error 和 Undefined variable with $_Files

mysql - 我想获得每个类别中访问量最大的文章(4 个类别)

php - 从数据库读取数据出错

mysql - SQL 维护脚本

php - 如何通过函数路由每个 mysql 查询?

mysql - 如何获取 MySQL 中的结果数(行数)?

mysql - 如何根据另一列的值获取单行值?

php - 从类别 ID 数组中检索文章

mysql - 按逗号分隔字符串中的单词分组

sql - 高效的 SQL 测试查询或验证查询将适用于所有(或大多数)数据库