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. Это может помочь.
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ не будет поддерживать в 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;
Это великолепно работает.