我通过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来解决这个问题,但问题不会消失。
任何帮助都将不胜感激。
1条答案
按热度按时间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将合并这些行,尽管它们是单独的行,因为它们没有不同的值集。