我有很多桌子,比如 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" ... 等应该只是 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 之间创建关系,现在可以使用相当快的连接,并且不再需要“创建表”。
请参阅数据库规范化以更好地解释这些概念。