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_Join - Fatal编程技术网

Mysql 简单左连接上的记录加倍问题

Mysql 简单左连接上的记录加倍问题,mysql,join,Mysql,Join,我正在运行此查询: CREATE TABLE SELECT people.*, Sheet1.department FROM people LEFT JOIN Sheet1 ON people.depno = Sheet1.depno 在一组详细列出员工记录的表格上 目标是创建一个包含所有人员数据的新表,以及一个可读的部门名称。很简单,对吧 问题在于,生成的表中的每个记录似乎都完全重复,每个字段实际上都是相同的,从而将一个大约23000条记录的表变成了一个大约46000条记录的表。我粗略地

我正在运行此查询:

CREATE TABLE
SELECT people.*, Sheet1.department
  FROM people LEFT JOIN Sheet1 ON people.depno = Sheet1.depno
在一组详细列出员工记录的表格上

目标是创建一个包含所有人员数据的新表,以及一个可读的部门名称。很简单,对吧

问题在于,生成的表中的每个记录似乎都完全重复,每个字段实际上都是相同的,从而将一个大约23000条记录的表变成了一个大约46000条记录的表。我粗略地说,因为这不是一个精确的翻倍-有大约一百个记录的差异

一些细节:people表包含15个字段,包括depno字段,它是一个整数,表示部门

Sheet1表是一个由导入的xls文件生成的表,其中包含两个字段:共享部门号和一个新部门,后者是与所讨论的部门号相对应的详细部门名称。Sheet1表中有44条记录

提前感谢您对这方面的任何建议。让我知道你可以从我这里使用什么其他信息

更新:以下是我最后使用的代码,来自我对Johan的回复,再次感谢所有参与此项工作的人:

CREATE TABLE morebetter 
    SELECT people.*, Sheet1.department FROM people 
    LEFT JOIN Sheet1 ON people.depno = Sheet1.depno 
    GROUP BY id 

听起来Sheet1.depno字段不是唯一的?

people.depno不是唯一的,这就是为什么要加倍

将“选择零件”更改为

这将消除重复的行

在MySQL中,您还可以编写

SELECT people.*, Sheet1.department
FROM people LEFT JOIN Sheet1 ON people.depno = Sheet1.depno
GROUP BY people.depno
它的工作原理稍有不同。 第一个查询消除具有重复输出的行,第二个查询消除具有重复的people.depno的记录,即使people.depno未出现在输出中

我喜欢第二种形式,因为它明确了要消除的重复项,并且不需要调整输出。 它的执行时间也稍微快一些

***警告*** “按版本分组”将删除它找到的任何double people.depno,但如果“选择”中的其他字段不相同,它将随机选择一个! 换句话说。如果SELECTDISTINCT的结果与GROUPBYVERSION不同,则意味着MySQL正在以静默方式删除非重复行。 这可能不是你想要的

为了安全起见,请在您关心的所有字段上进行分组!
如果group by位于唯一键上,则从与该唯一键相同的表中包含更多字段是毫无意义的。

请参阅:depno在Sheet1表中是否唯一?听起来你们可能有重复的。谢谢,伙计们。我来看看。史蒂夫:对不起,我在达伦之前没有看到你的答案——看看我对他的回答。问得好,达伦。Sheet1.depno在Sheet1表的记录中是唯一的,但你是对的:它在people表的记录中不是唯一的。哎呀,我在这方面错了100%。请参阅我对ypercube的回应。把这当作我的美味乌鸦晚餐。Johan,你的两种方法的结合正是我想要的。非常感谢!下面是最后一个查询,以供参考-如果我尝试的小减价失败,请提前道歉:代码创建表morebeeter选择人员。*,Sheet1.department FROM people LEFT JOIN Sheet1 ON people.depno=Sheet1.depno GROUP BY id,people.uid,fy,标题代码希望您的答案在将来当MySQL在查询结果中的记录翻倍时能够帮助其他人。这当然帮了我的忙。@user490581:MySQL不会将任何记录翻一番,除非您的数据或查询这样说。您可以发布这个查询的结果吗?:选择COUNT*,COUNTDISTINCT depno FROM Sheet1Nice work。就在我认为我对某些事情有把握的时候,每个人最初的基本问题都被证明是正确的。我重新检查了Sheet1的内容,虽然depno字段在原始电子表格中是唯一的,但某种导入问题确实导致它们在MySQL版本中重复出现。谢谢你继续怀疑,YeBube:随着一个创可贴,我现在有了这种情况的起源。而且,由于我不想拒绝您对初始问题的回答,count*和count depno的查询结果分别是86和42。
SELECT people.*, Sheet1.department
FROM people LEFT JOIN Sheet1 ON people.depno = Sheet1.depno
GROUP BY people.depno