2015-02-07 124 views
0

我想學習加入。但是,當我嘗試完全加入員工和工資表時,它失敗了。爲什麼失敗?完全加入Mysql失敗

我已添加解決方案的結果,僅供參考。

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從僱員FULL JOIN薪水employee.eid = Salary.eid; ERROR 1054(42S22):在 '字段列表' 的mysql>

更新未知列 'employee.eid':以下是左派的結果加入聯盟右鍵加入

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不支持全外連接。 – 2015-02-07 07:12:50

+0

[MySQL中的完全外連接]的可能重複(http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql) – 2015-02-07 07:13:21

回答

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 2015-02-08 09:25:48

+0

是的,你是正確的,它不是一個替代品,但它是最有可能的解決方法,重現mysql的完整連接查詢結果.. – Lucky 2015-02-08 14:19:04

+0

你可以閱讀這篇SO帖子爲什麼mysql不支持它... http:// stackoverflow。 COM /問題/ 3362079 /有--A-原因-的mysql-犯規支持,全外聯接 – Lucky 2015-02-08 14:24:36