我有一个名为 employee(三个 e)的表:
+------------+------------+---------------+--------------+
| 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 |
+------------+------------+---------------+--------------+
我的意图是将同一国家/地区的人配对( self 加入)并将他们并排放置。
因此,在同事的帮助下,我提出了以下查询:
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
别名关键字?我认为这些是必需的。
最佳答案
如果您只想在一个国家/地区内找到唯一的一对人,并且希望避免将人们与他们自己配对,请将以下条件添加到您的查询中
WHERE f.employeeid < s.employeeid
关于MySql 自连接子内部连接返回交叉连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551812/