gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:09 28 4
gpt4 key购买 nike

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

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

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

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

...查询返回 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 解决此问题,但问题不会消失。

如有任何帮助,我们将不胜感激。

最佳答案

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

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

正如您提到的,DISTINCT 不会解决这个问题,因为 DISTINCT 对结果行进行操作。如果所有选定字段中的值在这些结果行上都相同,它只会合并结果行。同样,如果您对具有重复行的单个表进行查询,DISTINCT 将合并这些行,尽管它们是单独的行,因为它们没有不同的值集。

关于mysql - MySQL 中的 INNER JOIN 返回同一行的多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750381/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com