MySQL FULL JOIN не работает, но правое и левое соединение работает

это сводит меня с ума. У меня есть две таблицы, в которых я пытаюсь предварительно сформировать соединение, 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'

этот запрос работает так же, как ожидалось при замене полного соединения на левое соединение, правое соединение или внутреннее соединение.

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

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

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

4 ответов


MySQL не поддерживает полное соединение

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


взгляните на это как имитировать полное внешнее соединение в MySQL. Это может помочь.


ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ не будет поддерживать в mysql.

вы можете эмулировать ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ используя Союз (от MySQL 4.0.0 on):

с двумя таблицами 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

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;

Это великолепно работает.