Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL连接返回重复记录_Mysql_Sql_Left Join - Fatal编程技术网

MYSQL连接返回重复记录

MYSQL连接返回重复记录,mysql,sql,left-join,Mysql,Sql,Left Join,我有两张桌子 表Manager Employees具有员工和经理记录。managerid和employeeid是关键记录。一名经理可以管理n名或多名员工。 表Employee有员工记录。经理和员工都在该表中。employeeId列是唯一的id。 下面是我从这些表中获取记录的尝试,这些表显示managerid、employeeid、managername和employeename。此查询返回重复的行。我怎样才能解决这个问题?数据库是mysql 我建议您在经理-员工表中查找重复项。或者在Employ

我有两张桌子

表Manager Employees具有员工和经理记录。managerid和employeeid是关键记录。一名经理可以管理n名或多名员工。 表Employee有员工记录。经理和员工都在该表中。employeeId列是唯一的id。 下面是我从这些表中获取记录的尝试,这些表显示managerid、employeeid、managername和employeename。此查询返回重复的行。我怎样才能解决这个问题?数据库是mysql


我建议您在经理-员工表中查找重复项。或者在Employee表中复制EmployeeID。如果这两个选项中的任何一个是真的,您将在结果中得到重复项,唯一的解决方案是使用select distinct或清理源表

SELECT `employeeId`,count(*) as cnt 
FROM `Employee`
GROUP BY `employeeId`
HAVING COUNT(*) > 1

SELECT `managerId`,`employeeId`,count(*) as cnt 
FROM `Manager-Employees`
GROUP BY `managerId`,`employeeId`
HAVING COUNT(*) > 1

选择DISTINCT将删除任何重复的行。您的经理-员工表中有重复的吗?@GabrielDurac,谢谢。是的,distinct will,但我想知道是否有一种不用distinct的方法。@RiggsFolly这很简单。有一个manager-employee表,其中包含员工及其对应经理的记录。该表包含employeeid和managerid。Employee表包含所有员工记录。员工可以是经理。它有一个employeeid字段。请在代码问题中给出一个-cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出,包括逐字记录错误消息;标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。调试基础。对于包含DBMS和DDL(包括约束和索引)的SQL,请输入格式化为表的代码。暂停总体目标的工作,将代码切掉到第1个表达式,没有给出您期望的内容,说出您期望的内容和原因。返回重复行不清楚。也不能从这些显示的表中获取记录。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。在给出业务关系/关联、表基或查询结果时,请说明其中的一行根据其列值对业务状况的说明。PS请通过编辑澄清,而不是评论。PS LEFT JOIN ON返回行上的内部联接并将所有不匹配的左表行以NULL扩展。始终知道要将上的什么内部联接作为上的外部联接的一部分。显然,employee表中存在重复记录
SELECT `employeeId`,count(*) as cnt 
FROM `Employee`
GROUP BY `employeeId`
HAVING COUNT(*) > 1

SELECT `managerId`,`employeeId`,count(*) as cnt 
FROM `Manager-Employees`
GROUP BY `managerId`,`employeeId`
HAVING COUNT(*) > 1