2015-02-07 4 views
0

Я пытаюсь изучить Joins. Но когда я попробовал Full join на столе сотрудника и зарплаты, он терпит неудачу. Почему он терпит неудачу?Full Join In Mysql Fails

Я добавил результаты решения, размещенного только для справки.

mysql> select * from employee; 
+-----+---------+ 
| eid | ename | 
+-----+---------+ 
| 1 | sampath | 
| 2 | maclean | 
| 3 | sudheer | 
+-----+---------+ 
3 rows in set (0.00 sec) 

mysql> select * from Salary; 
+------+--------+------+ 
| sid | salary | eid | 
+------+--------+------+ 
| 1001 | 5000 | 2 | 
| 1002 | 70000 | 3 | 
| 1003 | 70000 | 3 | 
+------+--------+------+ 
3 rows in set (0.00 sec) 

mysql> select employee.eid, employee.ename, Salary.salary from employee JOIN Salary on employee.eid=Salary.eid; 
+-----+---------+--------+ 
| eid | ename | salary | 
+-----+---------+--------+ 
| 2 | maclean | 5000 | 
| 3 | sudheer | 70000 | 
| 3 | sudheer | 70000 | 
+-----+---------+--------+ 
3 rows in set (0.00 sec) 

mysql> select employee.eid, employee.ename, Salary.salary from employee LEFT JOIN Salary ON employee.eid=Salary.eid; 
+-----+---------+--------+ 
| eid | ename | salary | 
+-----+---------+--------+ 
| 1 | sampath | NULL | 
| 2 | maclean | 5000 | 
| 3 | sudheer | 70000 | 
| 3 | sudheer | 70000 | 
+-----+---------+--------+ 
4 rows in set (0.00 sec) 

mysql> select employee.eid, employee.ename, Salary.salary from employee RIGHT JOIN Salary ON employee.eid=Salary.eid; 
+------+---------+--------+ 
| eid | ename | salary | 
+------+---------+--------+ 
| 2 | maclean | 5000 | 
| 3 | sudheer | 70000 | 
| 3 | sudheer | 70000 | 
+------+---------+--------+ 
3 rows in set (0.00 sec) 

MySQL> выберите employee.eid, employee.ename, Salary.salary от работника ПОЛНОГО РЕГИСТРИРУЙТЕСЬ Зарплату ON employee.eid = Salary.eid; ОШИБКА 1054 (42S22): Неизвестный столбец 'employee.eid' в 'списке поля' тузд>

Update: После является результатом LEFT JOIN Союза Right Регистрация

mysql> SELECT * FROM employee e 
    -> LEFT JOIN Salary s ON e.eid = s.eid 
    -> UNION 
    -> SELECT * FROM employee e 
    -> RIGHT JOIN Salary s ON e.eid = s.eid; 
+------+---------+------+--------+------+ 
| eid | ename | sid | salary | eid | 
+------+---------+------+--------+------+ 
| 1 | Rai  | NULL | NULL | NULL | 
| 2 | pinto | 1001 | 50000 | 2 | 
| 3 | sudheer | 1002 | 70000 | 3 | 
| 3 | sudheer | 1003 | 70000 | 3 | 
+------+---------+------+--------+------+ 
4 rows in set (0.00 sec) 
+0

MySQL не поддерживает полные внешние соединения. –

+0

Возможный дубликат [Full Outer Join in MySQL] (http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql) –

ответ

1

MySQL не поддерживает FULL OUTER JOIN ключевого слова. Поддерживаются только LEFT JOIN и RIGHT JOIN.

Вы можете попробовать это, чтобы эмулировать то же самое:

SELECT * FROM employee e 
LEFT JOIN salary s ON e.eid = s.eid 
UNION 
SELECT * FROM employee e 
RIGHT JOIN salary s ON e.eid = s.eid 
+0

Это не замена полного соединения. – user2185453

+0

Да, вы правы, это не замена, но наиболее вероятным обходным путем является воспроизведение результата в mysql для полных запросов на присоединение. – Lucky

+0

Вы можете прочитать это сообщение SO о том, почему mysql его не поддерживает ... http: // stackoverflow. ком/вопросы/3362079/есть-A-причина-MySQL-оленья кожа-поддержка-полная внешние объединения – Lucky