MySQL FULL JOIN не работает, но работает RIGHT и LEFT - PullRequest
9 голосов
/ 25 декабря 2010

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

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

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

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

Что, черт возьми, я делаю не так? Заранее спасибо!

Ответы [ 4 ]

14 голосов
/ 25 декабря 2010

MySQL не поддерживает FULL JOIN

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

6 голосов
/ 25 декабря 2010

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

2 голосов
/ 21 января 2012

FULL OUTER JOIN не будет поддерживаться в MySQL.

Вы можете эмулировать FULL OUTER JOIN , используя UNION (из 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
0 голосов
/ 05 июля 2013
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;

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

...