我有 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 中非常简单,但我终究无法弄清楚如何在关系代数中编写它。我不关心顺序,只关心所有数据都在一个字段下的一个大表中。
最佳答案
理论上,关系代数处理集合。一个集合永远不会有重复项。
在实践中,关系 DBMS 不实现基于集合的关系代数。原因之一是性能。每个查询都必须删除重复项(这是一项昂贵的操作),因此在实践中,DBMS 处理多集:允许重复的元组。
这带来了一个挑战:SQL 并没有真正处理重复元组的好方法。例如,假设您有一个包含一个属性和两个元组的表,两者都相同。现在删除第一个元组并保留第二个。如果没有某种黑客手段,您将无法做到这一点。
回到你的问题:你的问题的答案是 UNION。
R1 U R2 U R3
在关系代数中是否有重复项并不重要,因为理论上,集合中不能有重复项。
--伤害
关于database - 合并关系代数中的单字段表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203151/