2015-07-22 68 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