2

我有 3 个不同的表,每个表只有一个字段。

|fname1 |    |fname2 |    |fname3 |
|*******|    |*******|    |*******|
|Adam   |    |Andy   |    |Alan   |
|Bob    |    |Bryan  |    |David  |
|Charles|    |Chuck  |    |Shawn  |

我想将这些表合并到一个只有“fname”字段的大表中,如下所示:

|fname  |
|*******|
|Adam   |
|Bob    |
|Charles|
|Andy   |
|Bryan  |
|Chuck  |
|Alan   |
|David  |
|Shawn  |

这在 SQL 中非常简单,但我一生都无法弄清楚如何在关系代数中编写它。我不关心顺序,只关心所有数据都在一个字段下的一张大表中。

4

1 回答 1

2

理论上,关系代数处理集合。一个集合永远不会有重复。

在实践中,关系 dbms 不实现基于集合的关系代数。原因之一是性能。每个查询都必须删除重复项(这是一项昂贵的操作),因此在实践中,DBMS 处理多集:允许重复元组。

这带来了一个挑战:SQL 并没有很好的方法来处理重复的元组。例如,假设您有一个具有一个属性的表和两个相同的元组。现在删除第一个元组并留下第二个。如果没有某种黑客,你就无法做到这一点。

回到你的问题:你的问题的答案是 UNION。

R1 U R2 U R3

关系代数中是否有重复并不重要,因为理论上,集合中不能有重复。

--dmg

于 2013-05-02T07:58:33.853 回答