MySql 自连接子内部连接返回交叉连接

标签 mysql sql join

我有一个名为 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/

相关文章:

mysql - Left Join 与三个表的行为不符合预期

mysql - 合并两个 MySQL 表,使用其中一个数据作为合并表中的表头

php - 如何修复我的表单未将数据更新到数据库的问题 [Codeigniter]

android - SQL 按列排序,0 为异常(exception)

mysql - mysql中的SUM和Group by逻辑问题

mysql - SQL 子查询

java - 如何使用Java与数据库服务器建立持久连接?

php - 阻止表的替代方法

php - 根据已完成的搜索来搜索mysql数据库

PHP PDO 异常 : "SQLSTATE[HY093]: Invalid parameter number"