2015-07-10 24 views
12

Piszę kwerendę, która nie działa poprawnieMySQL kwerenda nie działa z NOT IN

Moje zapytanie:

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

Mówi

# 1267 - Illegal mix sortowania
(utf8_general_ci, IMPLICIT) i
(utf8_unicode_ci, IMPLICIT) dla operacji '='

+2

Sprawdź typ sortowania dla każdej tabeli i upewnij się, że mają one taką samą sortowanie. http://stackoverflow.com/a/5747047/2899618 –

+0

Obie kolumny mają takie same sortowanie utf8_general_ci \t @Uchiha –

Odpowiedz

16

Problem stoją wynika niekompatybilnych sortowania między dwoma tabelami. Jednym ze sposobów, aby się wokół niego jest użycie COLLATE klauzuli w zapytaniu:

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

Demo here

3

Jest to generalnie spowodowane porównywaniem dwóch ciągów niekompatybilnego sortowania lub próbą wybrania danych o różnym sortowaniu w łączonej kolumnie. Klauzula COLLATE pozwala określić sortowanie używane w zapytaniu.

Albo można ALTER TABLE dopasować COLLATE

3

problem jest w sortowania między dwiema tabelami, więc spróbuj COLLATE do tego, może być to resolve przez Pomoc z łatwością zblokować.

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

również sprawdzić, że baza danych, która jest taka sama

niezgodne sortowania lub próbą wyboru danych o różnych zestawień do kolumny łącznie. Klauzula COLLATE pozwala określić sortowanie używane w zapytaniu.

Powiązane problemy