MySQL 查询不适用于 NOT IN

Posted

技术标签:

【中文标题】MySQL 查询不适用于 NOT IN【英文标题】:MySQL-query is not working with NOT IN 【发布时间】:2015-09-28 18:22:29 【问题描述】:

我正在编写一个无法正常工作的查询

我的查询:

SELECT * 
FROM admin_marker 
WHERE admin_marker.city NOT IN (SELECT target FROM messsage)

它说

#1267 - 排序规则的非法混合 (utf8_general_ci,IMPLICIT) 和 (utf8_unicode_ci,IMPLICIT) 用于操作 '='

【问题讨论】:

检查每个表的排序规则类型,并确保它们具有相同的排序规则。 ***.com/a/5747047/2899618 两列具有相同的排序规则 utf8_general_ci @Uchiha 【参考方案1】:

您面临的问题是由于两个表之间的排序规则不兼容。一种解决方法是在查询中使用COLLATE 子句:

SELECT * 
FROM admin_marker 
WHERE admin_marker.city NOT IN (SELECT target COLLATE utf8_general_ci 
                                FROM messsage)

Demo here

【讨论】:

【参考方案2】:

问题在于两个表之间的排序,所以请尝试COLLATE,这可能是通过COLLATE的帮助很容易解决的。

SELECT * FROM admin_marker WHERE admin_marker.city NOT IN (SELECT target COLLATE utf8_general_ci FROM messsage)

并检查其数据库是否相同

不兼容的排序规则或尝试将不同排序规则的数据选择到组合列中。子句 COLLATE 允许您指定查询中使用的排序规则。

【讨论】:

【参考方案3】:

这通常是由于比较两个不兼容的排序规则字符串或尝试将不同排序规则的数据选择到组合列中引起的。子句COLLATE 允许您指定查询中使用的排序规则。

或者你可以ALTER TABLE匹配COLLATE

【讨论】:

以上是关于MySQL 查询不适用于 NOT IN的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Drop table 不适用于前缀

删除功能不适用于 MySQL 表?

持久连接不适用于 codeIgniter 中的 mysql 驱动程序

Django MySql全文搜索有效,但不适用于测试

Docker 教程不适用于 springboot+mysql+react 应用程序

护照身份验证不适用于 nodejs 和 mysql