Полное соединение MySQL не работает, но соединение RIGHT и LEFT работает

Это сводит меня с ума. У меня есть две таблицы, в которых я пытаюсь выполнить соединение: usersXstats и usersXstats_alltime.

Обе таблицы имеют одинаковые столбцы: id, userId, statId и value.

То, что я пытаюсь сделать, это

SELECT * 
FROM usersXstats 
FULL JOIN usersXstats_alltime 
ON usersXstats.userId=usersXstats_alltime.userId 
AND usersXstats.statId=usersXstats_alltime.statId

Однако это возвращается

Unknown column 'usersXstats.userId' in 'on clause'

Этот запрос работает так, как ожидалось, при замене FULL JOIN на LEFT JOIN, RIGHT JOIN или INNER JOIN.

Чтобы упростить чтение изначально, я написал следующий запрос:

SELECT * 
FROM usersXstats as uxs 
FULL JOIN usersXstats_alltime as uxsat 
ON uxs.userId=uxsat.userId 
AND uxs.statId=uxsat.statId

Который вернул другую ошибку:

check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL JOIN usersXstats_alltime as uxsat ON uxs.userId=uxsat.userId AND uxs.statId' at line 1

Что я делаю не так? Заранее спасибо!


person Alex    schedule 25.12.2010    source источник


Ответы (5)


MySQL не поддерживает ПОЛНОЕ СОЕДИНЕНИЕ

http://en.wikipedia.org/wiki/Join_%28SQL%29#Full_outer_join

person Mantar    schedule 25.12.2010
comment
Замена FULL JOIN на FULL OUTER JOIN возвращает ошибку: проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «OUTER JOIN usersXstats_alltime ON usersXstats.userId=usersXstats_alltime.userId» в строке 1 - person Alex; 25.12.2010
comment
Прочтите полный раздел по ссылке, предоставлено решение MySQL. - person Mantar; 25.12.2010
comment
О, глупый я не прочитал достаточно далеко. Я думал, что первым примером был MySQL. Спасибо! - person Alex; 25.12.2010

Взгляните на этот Как имитировать ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ в MySQL. Это может помочь.

person Jahan    schedule 25.12.2010
comment
Спасибо, я смог получить желаемые результаты с помощью UNION, однако не кажется ли это немного запутанным? Разве я не могу сделать это с помощью полного внешнего соединения? - person Alex; 25.12.2010
comment
Неважно. Я предполагаю, что MySQL не поддерживает FULL JOIN. Спасибо за ваш ответ - person Alex; 25.12.2010
comment
Пожалуйста, добавьте информацию в свой пост на случай, если ссылка умрет - person Black; 15.11.2019

FULL OUTER JOIN не поддерживается в mysql.

Вы можете эмулировать FULL OUTER JOIN, используя UNION (начиная с MySQL 4.0.0):

с двумя таблицами usersXstats,usersXstats_alltime

SELECT * FROM usersXstats
LEFT JOIN usersXstats_alltime ON usersXstats.userId= usersXstats_alltime.userId
UNION
SELECT * FROM usersXstats
RIGHT JOIN usersXstats_alltime ON usersXstats.statId= usersXstats_alltime.statId
person Vijin Paulraj    schedule 21.01.2012

SELECT Person1.Firstname, Person2.State
FROM Person1
left JOIN Person2
ON Person1.PersonID=Person2.PersonID
UNION
SELECT Person1.Firstname, Person2.State
FROM Person1
right JOIN Person2
ON Person1.PersonID=Person2.PersonID;

отлично работает.

person rajesh    schedule 04.07.2013
comment
Привет, Раджеш - если вы добавите 4 пробела в начало каждой строки кода, тогда он будет правильно отформатирован как блок кода :) - person robjohncox; 05.07.2013

Я не знаю, в чем проблема, но я столкнулся с той же проблемой, поэтому вы можете попробовать это:

SELECT * 
FROM usersXstats 
Left JOIN usersXstats_alltime 
ON usersXstats.userId=usersXstats_alltime.userId
Union
SELECT * 
FROM usersXstats 
RightJOIN usersXstats_alltime 
ON usersXstats.userId=usersXstats_alltime.userId 
person Ankit Pandey    schedule 19.03.2021
comment
Добро пожаловать в СО. Вы отвечаете равным другим уже данным. stackoverflow.com/a/8950981/1138946. - person CFreitas; 19.03.2021