我通过R使用MySQL。我在同一个数据库中使用两个表,我注意到一些奇怪的东西,我无法解释。更具体地说,当我尝试使用外键在表之间建立连接时,结果并不是它应该得到的结果。
一个表名为Genotype_microsatellites,,第二个表名为Records_morpho.它们通过外键sample_id连接。
如果我只使用以下命令从Genotype_microsatellites表中选择具有某些特征的记录...
Gen_msat <- dbGetQuery(mydb, 'SELECT *
FROM Genotype_microsatellites
WHERE CIDK113a >= 0')
...the查询返回52个变量的546个观察值,这正是我所期望的。现在,我想执行一个向结果添加更多信息的查询,特别是通过包含来自Records_morpho表的数据。因此,我使用以下代码:
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来解决这个问题,但是这个问题不会消失。
任何帮助都将不胜感激。
发布于 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将合并这些行,尽管它们是单独的行,因为它们没有不同的值集。
https://stackoverflow.com/questions/50750381
复制相似问题