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 解决此问题,但问题不会消失。
任何帮助将非常感激。
听起来它正在按预期工作,这就是连接的工作原理。您可以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 将合并这些行,尽管它们是单独的行,因为它们没有不同的值集。
| 归档时间: |
|
| 查看次数: |
3632 次 |
| 最近记录: |