2015-07-10 66 views
12

我写一个查询,无法正常工作正常工作的MySQL查询不与NOT IN

我的查询:

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

它说

#1267 - 排序规则的非法组合
(utf8_general_ci,IMPLICIT)和
(utf8_unicode_ci,IMPLICIT)for operation'='

+2

检查每个表的排序规则类型,并确保它们具有相同的排序规则。 http://stackoverflow.com/a/5747047/2899618 –

+0

这两列都有相同的排序规则utf8_general_ci \t @Uchiha –

回答

16

你所面临的问题是由于两个表之间不兼容的排序规则。来左右它的方法之一是使用COLLATE子句中查询:

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

Demo here

3

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

或者你可以ALTER TABLE匹配COLLATE

3

问题是在两个表之间的整理,所以请尽量COLLATE对于这一点,可能这是解决由容易帮助COLLATE。

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

,并且还检查的该数据的基础上是相同

不相容归类或通过尝试来选择不同的核对数据组合成组合列。子句COLLATE允许您指定查询中使用的排序规则。