2015-09-26 56 views
-1

對不起,對LONG的解釋,但我不知道如何簡單解釋這個...我有一個表(table_animals),有一個名爲Taxon的領域的動物科學名稱。在表中的行看起來像這樣(其中N是隻是一個數字鍵):需要查詢合併類似表格

N | Taxon | Parent | CommonName | Rank 
13 | Ursus-maritimus | Ursus | polar bear | 65 

學名有時會改變或正在重組,所以我相應地更新我的表。我首先創建了一個以當前科學名稱爲特色的新表(table_animals_new)。它只有兩個領域,分類和排名...

N | Taxon | Rank 
9 | Ursus-maritimus | 65 

我現在想以某種方式結合這兩個表在兩個表中顯示一切。

所以我們可以說這代表了舊數據(table_animals)...

N | Taxon | Parent | CommonName | Rank 
11 | Ursidae | Carnivora | bear family | 45 
12 | Ursus | Ursidae | typical bears | 55 
13 | Ursus-maritimus | Ursus | polar bear | 65 
14 | Ursus-blue | Ursus | blue bear | 65 

比較它在新表(table_animals_new)數據...

N | Taxon | Parent | CommonName | Rank 
8 | Ursinidae | Carnivora | bear family | 45 
9 | Ursus | Ursinidae | typical bears | 55 
10 | Ursus-maritimus | Ursus | polar bear | 65 
11 | Ursus-red | Ursus | red bear | 65 

在這個虛構的例如,藍熊(Ursus-blue)不再被認爲是一個物種,因此它不在新表中列出。然而,科學家們發現了一種新的物種 - 紅色的熊(熊屬紅),這在舊錶中沒有列出。此外,熊現在被安置在Ursinidae家族,而不是熊科。

我想要做的是...

1)顯示所有的新表(table_animals_new)

2)行顯示的匹配行從舊錶中的所有其他信息。因此,如果新表中有Taxon ='Ursus'的行,並且舊錶也有Taxon ='Ursus'的行,那麼舊錶中與Ursus關聯的字段(例如CommonName)也會顯示。

3)顯示「孤行行」 - 舊錶中與新表中的任何內容不匹配的行(例如Taxon ='Ursus-blue')。

4)以某種方式將孤立的行標記爲「孤立的」。如果我有一張有5萬行的表格,並且我看到一行Taxon ='red-blue',我不會對它來自哪個表格有任何線索。所以我想要一個額外的列,說「孤行」或「不孤立」(或NULL)。

還有一個選項,如果不是太困難,那將是非常酷的選擇......標記出現在新表格中但不是舊錶格的「新」。

所以成品表可能是這個樣子:

N | Taxon | Parent | CommonName | Rank | Orphaned 
11 | Ursidae | Carnivora | bear family | 45 | orphan 
12 | Ursinidae | Carnivora | bear family | 45 | NEW 
13 | Ursus | Ursidae | typical bears | 55 | (NULL) 
14 | Ursus-maritimus | Ursus | polar bear | 65 | (NULL) 
15 | Ursus-blue | Ursus | blue bear | 65 | orphan 
16 | Ursus-red | Ursus | red bear | 65 | NEW 

我認爲我可以在兩個或三個操作做到這一點,但我想弄清楚如何只用一個查詢做到這一點。下面是我想要做的更簡單的例子。

舊錶

Ç

d

新建表

d

Ë

合併顯示

C(孤兒 - 在舊錶只)

d

E(新 - 僅在新表)

+0

這就是所謂的'FULL OUTER JOIN' 。 MySQL沒有這個功能。以下是如何模擬它:http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql – Barmar

回答

1

我會建議使用一個聯合查詢。 你可以把它分解成3個疑問: - 同時存在於兩個 這些記錄 - 存在於表A僅 這些記錄 - 存在於表B中這些記錄只