删除mySQL

时间:2016-06-01 16:04:42

标签: mysql join duplicates inner-join distinct

我正在尝试加入两个表,一个用于描述物种,另一个用于物种之间的父/子关系。不幸的是,有多个“半”重复项导致我的查询每个分类单元返回多行。

使用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)

分类单元定义表包含带有分类单元名称的文本字段。在这种情况下,即使使用DISTINCT,重复的parentID为'4'也会给我多行。我的查询如下:

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.        

对于每条记录,每个独特的分类单只有一行。

1 个答案:

答案 0 :(得分:0)

我认为这个问题的最佳解决方案是按照@Strawberry的建议对数据集进行排序,然后通过对每个ID和父ID对进行分组,为每个ID选择最小有序值,将其设置为每个组的新字段,然后删除有序值和最小值不相等的所有行。