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

问题描述

| 我正在运行此查询
CREATE TABLE
SELECT people.*,Sheet1.department
  FROM people LEFT JOIN Sheet1 ON people.depno = Sheet1.depno
在一组详细记录员工记录的表上。 目标是创建一个包含所有“人”数据以及人类可读的部门名称的新表。简单吧? 问题在于结果表中的每条记录似乎都是完全重复的(实际上每个字段都相同),从而将大约23,000条记录的表变成了大约46,000条记录的表。我说“大约”是因为这并不是精确的加倍-大约有100条记录之间的差异。 一些细节:\“ people \”表包含15个字段,其中包括\“ depno \”字段,它是一个整数,表示部门。 正如您可能会猜到的那样,“ Sheet1 \”表是一个由导入的xls文件生成的表,该文件包含两个字段:共享的“ depno”和新的“ department”(后者是对应的详细部门名称)到相关的Depno)。 \“ Sheet1 \”表中有44条记录。 预先感谢您对此的任何指点。让我知道您还可以从我这里使用哪些其他信息。 更新:这是我最终使用的代码,来自对Johan的回复(再次感谢从事此工作的每个人):
CREATE TABLE morebetter 
    SELECT people.*,Sheet1.department FROM people 
    LEFT JOIN Sheet1 ON people.depno = Sheet1.depno 
    GROUP BY id 
    

解决方法

        people.depno不是唯一的,这就是为什么您要加倍的原因。 将
SELECT
部分更改为
SELECT DISTINCT people.*,Sheet1.department
  FROM people LEFT JOIN Sheet1 ON people.depno = Sheet1.depno
这将消除重复的行。 在MySQL中,您还可以编写
SELECT people.*,Sheet1.department
FROM people LEFT JOIN Sheet1 ON people.depno = Sheet1.depno
GROUP BY people.depno
哪个工作略有不同。 第一个查询消除具有重复输出的行,第二个查询消除具有重复
people.depno
的记录,即使在输出中没有出现people.depno。 我喜欢第二种形式,因为它可以明确指出您要消除的重复项,而无需调整输出。 执行时间也略快。 ***警告***
group by
版本将消除它所查找到的任何一个double.depno,但是如果选择中的其他字段不同,则将随机选择一个! 换一种说法。如果
select distinct
的结果与
group by
版本的结果不同,则表示MySQL默默地删除了非重复行。 这可能不是您想要的! 为了安全起见,请在您关心的所有字段上加上
group by
! 如果分组依据位于“ 10”键上,那么将同一表中的其他字段作为唯一键包含进去是毫无意义的。     ,        听起来like11ѭ字段不是唯一的吗?