从多个表中进行选择的最佳方法


Best approach to select from multiple tables

我有很多表,如A1,B1,C1。等都具有相同的行结构

Moz -  Attr1 - attr2

还有一个包含所有表名称的表,例如:

Id(pk) - tname - input
1          A1      X
2          B1      Y
3          C1      Z

我正在寻找在一个视图中获取所有 A1、B1、C1 值的最佳方法。如果可能,不使用 UNION

如果所有表都具有相同的结构,则所有数据实际上都属于一个表。为了给它起个名字,让我们称它为XY

表名"A1、B1"...etc 应该只是 XY 表中的另一个字段:

Moz -  Attr1 - attr2 - context
-      -       -       A1
-      -       -       B1

此表确实需要正确编制索引。
假设Moz字段是每个表的主键,则需要将 (Moz,Context) 作为主键,以避免出现重复Moz值的问题。

然后,获取所有表的并集就像SELECT * from XY一样简单快捷。

如果需要选择几个表:SELECT * from XY WHERE context IN ('A1', 'B1')

一般来说,在SQL RDBMS中使用动态创建的表是一个非常糟糕的主意,因为它完全违背了"关系"的目的,并且会导致性能非常糟糕。

只是发现了困难的方法,因为从技术上讲,你的 A1、B1、C1 表是不相关的,但你希望它们通过使用联合变得相关,你不想使用,因为它"慢"。
通过将名称存储为字段,您可以在"表列表"表和 XY 之间创建关系,现在可以使用相当快的连接,并且不再需要进一步的"创建表"。

请参阅数据库规范化以更好地解释这些概念。