2016-06-01 7 views
0

私は2つのテーブルを結合しようとしています.1つは種を記述し、もう1つは種間の親子関係です。残念ながら、複数の「準」重複が存在するため、クエリでタクソンごとに複数の行が返されます。mySQLの内部結合で "semi"重複を削除する

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

サンプル(完全)と取得したい結果を表示 – scaisEdge

+0

こんにちは、@scaisEdge - 私は例を追加し、テーブルを明確にしました。タクソンテーブル(図示せず)は、単に名前フィールドとTIDを有する。 –

+0

@Strawberry TIDによって定義された各タクソンが名前、rankID、parentID(そのTIDで最も高い)、およびtaxonAuthorityを持つ結果の継続。私の現在の問題は、既存の情報を複製するさまざまなTaxonAuthorityのバージョンです(サンプル表にハイライトされています)。 –

答えて

0

私は、この問題の最良の解決策は、@Strawberryの提案に従ってデータセットを注文し、各IDと親IDのペアをグループ化し、それぞれの最小値を選択し、順序付けられた値と最小値が等しくないすべての行を削除します。

関連する問題