2015-07-22 66 views
1

我有一個表稱爲employeee(三聯E公司):MySql的自聯接子內連接返回交叉連接

+------------+------------+---------------+--------------+ 
| employeeid | lastname | country  | departmentid | 
+------------+------------+---------------+--------------+ 
|  123 | Rafferty | Australia  |   31 | 
|  124 | Jones  | Australia  |   33 | 
|  145 | Heisenberg | Australia  |   33 | 
|  201 | Robinson | United States |   34 | 
|  305 | Smith  | Germany  |   34 | 
|  306 | Williams | Germany  |   NULL | 
+------------+------------+---------------+--------------+ 

我的目的是配對(自聯接)同一國家內的人並把他們一邊側。

於是我想出了與同事一些幫助下面的查詢:

SELECT f.employeeid, f.lastname, s.employeeid, s.lastname, f.country 
FROM employeee f INNER JOIN employeee s ON f.country = s.country 

結果是不是100%,我打算。交叉連接似乎是在結果:

+------------+------------+------------+------------+---------------+ 
| employeeid | lastname | employeeid | lastname | country  | 
+------------+------------+------------+------------+---------------+ 
|  123 | Rafferty |  123 | Rafferty | Australia  | 
|  124 | Jones  |  123 | Rafferty | Australia  | 
|  145 | Heisenberg |  123 | Rafferty | Australia  | 
|  123 | Rafferty |  124 | Jones  | Australia  | 
|  124 | Jones  |  124 | Jones  | Australia  | 
|  145 | Heisenberg |  124 | Jones  | Australia  | 
|  123 | Rafferty |  145 | Heisenberg | Australia  | 
|  124 | Jones  |  145 | Heisenberg | Australia  | 
|  145 | Heisenberg |  145 | Heisenberg | Australia  | 
|  201 | Robinson |  201 | Robinson | United States | 
|  305 | Smith  |  305 | Smith  | Germany  | 
|  306 | Williams |  305 | Smith  | Germany  | 
|  305 | Smith  |  306 | Williams | Germany  | 
|  306 | Williams |  306 | Williams | Germany  | 
+------------+------------+------------+------------+---------------+ 

而且爲什麼沒有做f.employeeid, s.employeeid當使用AS別名關鍵字?我認爲這些都是必需的。

+0

你想要什麼樣的結果? –

+0

你的問題是什麼? – HaveNoDisplayName

+0

我的意圖是將同一個國家的人員(自我加入)並排放在一起。 –

回答

2

如果你只想要一國之內的人獨特的對,你想避免配對的人了自己,然後添加以下條件查詢

WHERE f.employeeid < s.employeeid 
+0

感謝那正是我所尋找的 –

+1

我很好奇爲什麼它小於?我不理解背後的理由。 –

+2

@RobertRocha'>'也適用。正如你所提到的,你的結果是一個國家內部的交叉連接,這意味着在一個國家內每個可能的ID組合都會產生,即如果你只有值1和2,你會得到(1,1)(1,2)(2 ,1)和(2,2)。通過指定'>'或'<',您可以將結果限制爲(1,2)或(2,1) – FuzzyTree