MySQL 中的 INNER JOIN 返回同一行的多个条目

Cin*_*hio 1 mysql r inner-join

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

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

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

Gen_msat <- dbGetQuery(mydb, 'SELECT * 
                   FROM Genotype_microsatellites
                   WHERE CIDK113a >= 0')
Run Code Online (Sandbox Code Playgroud)

...查询返回 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')
Run Code Online (Sandbox Code Playgroud)

问题是现在输出有 890 个观察值和 54 个变量!某些sample_id值(即数据框中的行或个体)多次出现,但事实不应该如此。我尝试使用 SLECT DISTINCT 解决此问题,但问题不会消失。

任何帮助将非常感激。

Uue*_*rdo 5

听起来它正在按预期工作,这就是连接的工作原理。您可以A JOIN B ON A.x = B.y将 A 中的每一行与 B 中具有y匹配 A 行的 的每一行相结合x。如果 B 中有 3 行与 A 中的一行匹配,您将获得这些结果的三个行。A 行的数据将在每次 B 行匹配时重复。

更进一步,如果 x 不唯一并且 y 也不唯一。并且您有两个具有相同值的 x 和三个具有该值的 y,它们将产生六个结果行。

正如您所提到的,DISTINCT 不会消除此问题,因为 DISTINCT 跨结果行进行操作。仅当结果行上所有选定字段中的值相同时,它才会合并结果行。同样,如果您对包含重复行的单个表进行查询,DISTINCT 将合并这些行,尽管它们是单独的行,因为它们没有不同的值集。