微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决简单左联接上的记录加倍问题

| 我正在运行此查询
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ѭ字段不是唯一的吗?     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?