对不起,对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(新 - 仅在新表)
这就是所谓的'FULL OUTER JOIN' 。 MySQL没有这个功能。以下是如何模拟它:http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql – Barmar