我正在尝试连接两个表,一个描述物种,另一个描述物种之间的父/子关系。不幸的是,有多个“半”重复项导致我的查询为每个分类单元返回不止一行。
使用 TID 和 ParentTID 字段的分类单元关系表的示例:
TID AuthorityID ParentTID
1 1 4 <-- offending row (note tid, parenttid)
1 1 2
2 1 2
3 2 2
1 2 4 <-- offending row (note tid, parenttid)
分类单元定义表包含带有分类单元名称的文本字段。在这种情况下,重复的parentID“4”给了我不止一行,即使使用DISTINCT也是如此。我的查询如下:
SELECT SciName, rankID, MAX(parenttid) AS parentID, taxaenumtree.tid,
MAX(taxauthid) AS taid FROM taxaenumtree INNER JOIN taxa ON taxa.tid =
taxaenumtree.tid WHERE rankID > 1
AND SciName NOT LIKE "Animalia"
GROUP BY taxaenumtree.tid
结果集(在 TID 与另一个表连接之前):
TID AuthorityID ParentTID
1 1 4
2 1 2
3 2 2
我想获得类似的东西(加入后):
TaxonID FullName RankID ParentID TaxonAuthority
1 Magnoliophyta 10 4 1
2 Plantae 10 2 1
3 Cupressacae 30 2 2
and so on, producing 1 row for each taxon with the highest ParentID.
对于每条记录,每个唯一分类单元只有一行。
最佳答案
我认为这个问题的最佳解决方案是按照@Strawberry的建议对数据集进行排序,并通过对每个ID和父ID对进行分组,为每个ID和父ID对选择最小排序值,将其设置为为每个组创建一个新字段,然后删除排序值和最小值不相等的所有行。
关于mysql - 删除 mySQL 中内部联接上的 "semi"重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37573700/