首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL中的内连接返回同一行的多个条目

MySQL中的内连接返回同一行的多个条目
EN

Stack Overflow用户
提问于 2018-06-08 05:25:12
回答 1查看 1.6K关注 0票数 0

我通过R使用MySQL。我在同一个数据库中使用两个表,我注意到一些奇怪的东西,我无法解释。更具体地说,当我尝试使用外键在表之间建立连接时,结果并不是它应该得到的结果。

一个表名为Genotype_microsatellites,,第二个表名为Records_morpho.它们通过外键sample_id连接。

如果我只使用以下命令从Genotype_microsatellites表中选择具有某些特征的记录...

代码语言:javascript
复制
Gen_msat <- dbGetQuery(mydb, 'SELECT * 
                   FROM Genotype_microsatellites
                   WHERE CIDK113a >= 0')

...the查询返回52个变量的546个观察值,这正是我所期望的。现在,我想执行一个向结果添加更多信息的查询,特别是通过包含来自Records_morpho表的数据。因此,我使用以下代码:

代码语言:javascript
复制
Gen_msat <- dbGetQuery(mydb, 'SELECT  Genotype_microsatellites.*,
                   Records_morpho.net_mass_g,
                   Records_morpho.svl_mm 
                   FROM Genotype_microsatellites
                   INNER JOIN Records_morpho ON Genotype_microsatellites.sample_id = Records_morpho.sample_id 
                   WHERE CIDK113a >= 0')

问题是现在的输出有890个观察值和54个变量!一些sample_id值(即数据框中的行或个体)多次出现,这不应该是这种情况。我已经尝试使用SLECT DISTINCT来解决这个问题,但是这个问题不会消失。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 05:35:47

听起来它像预期的那样工作,这就是joins的工作方式。使用A JOIN B ON A.x = B.y,您可以获得A中的每一行,以及B中y与A行的x相匹配的每一行。如果B中有3行与A中的一行匹配,那么您将得到这些行的三个结果行。对于每个B行匹配,将重复A行的数据。

更进一步,如果x和y都不是唯一的。两个x有相同的值,三个y有这个值,它们将产生六个结果行。

正如您所提到的,DISTINCT并不能解决这个问题,因为DISTINCT是跨结果行运行的。只有当所有选定字段中的值在这些结果行上相同时,它才会合并结果行。类似地,如果您在具有重复行的单个表上有一个查询,DISTINCT将合并这些行,尽管它们是单独的行,因为它们没有不同的值集。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50750381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档