mysql - 删除 mySQL 中内部联接上的 "semi"重复项

标签 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)

分类单元定义表包含带有分类单元名称的文本字段。在这种情况下,重复的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/

相关文章:

MySQL加载数据错误

PHP/mysql条件更新查询

mysql - 可以使用SSH导出一些数据库Mysql

mysql - 查询规范化数据库,3张表

php - MySQL 增量并避免不正确的引用

mysql - 隐藏重复行sql phpmyadmin

无法通过将数据库文件夹复制到数据文件夹来恢复 MySQL 数据库

mysql - Django 查询与同一个表上的另一个查询连接

sql - 如何在 MySQL 中连接具有不同行数的两个表?

mysql - INSERT ... ON DUPLICATE KEY UPDATE(要比较的两个键)