inner join返回同一行的多个条目

q7solyqu  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(144)

我通过r使用mysql。我正在处理同一个数据库中的两个表,我注意到一些奇怪的事情,我无法解释。更具体地说,当我尝试使用外键在表之间建立连接时,结果不是应该的结果。
一个表称为基因型\微卫星,第二个表称为记录\形态。它们通过外键id连接。
如果我只使用下面的命令从基因型\微卫星表中选择具有某些特征的记录。。。

Gen_msat <- dbGetQuery(mydb, 'SELECT * 
                   FROM Genotype_microsatellites
                   WHERE CIDK113a >= 0')

…查询返回52个变量的546个观察值,正是我所期望的。现在,我想做一个查询,为我的结果添加更多的信息,特别是通过包含records\u morpho表中的数据。i、 因此,请使用以下代码:

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个变量!!一些样本id值(即数据框中的行或个体)多次出现,但情况应该不是这样。我曾尝试使用slect distinct来解决这个问题,但问题不会消失。
任何帮助都将不胜感激。

pengsaosao

pengsaosao1#

听起来它是按预期工作的,这就是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将合并这些行,尽管它们是单独的行,因为它们没有不同的值集。

相关问题