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

时间:2013-11-13 10:47:45

标签: php mysql join

我有很多表,如A1,B1,C1..etc。所有具有相同的行结构

Moz -  Attr1 - attr2

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

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

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

1 个答案:

答案 0 :(得分:1)

如果所有表格具有相同的结构,则所有数据都属于一个表。我们称之为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中使用动态创建的表是一个非常糟糕的主意,因为它完全违背了“Relational”的目的,并且会导致性能极差。

你刚刚发现了困难的方法,因为从技术上讲,你的A1,B1,C1表是无关的,但是你希望它们通过使用你不想使用的联合而变得相关,因为它是“慢”。
通过将名称存储为字段,可以在“表列表”表和XY之间创建关系,现在可以使用合理快速的连接,并且不再需要“CREATE TABLE”。

请参阅Database normalization以更好地解释这些概念。