根据第一个表组合来自多个表的数据

时间:2013-11-15 22:51:00

标签: mysql sql sql-server tsql

我有一个装满物品的桌子,目前只有一种类型,关于该项目的所有内容都在同一张桌子上。现在我想再添加两种类型。许多列(&gt; 10)对于每种类型都是唯一的,所以我不只是想在表中有30列,其中20列是空值,所以我想把它们分开:< / p>

tbl_items_common
tbl_items_type1 [for data unique to this type]
tbl_items_type2 [for data unique to this type]
tbl_items_type3 [for data unique to this type]

所有表格都有一个公共字段'id',用于匹配项目和数据。

现在我正在考虑编码和思考:

我是否应该费心去分开这些,或者我应该只有一张大桌子。使插入和查询更容易,但数据库更加“混乱”。

向上拆分数据会使db更加孤立,但会使代码更复杂。

或者,我可以使用3个完全独立的表,其中一些列在它们之间相同,但后来我不确定如何生成一个在所有3个表中都是唯一的唯一ID。

如果我决定分割数据,是否可以在一个查询中获取所有数据(嵌入式案例/选择可能?),或者我必须首先执行SELECT以查找项目类型然后另一个抓住剩下的数据?在报告时并不漂亮。

那么我想知道什么?(1)您会选择哪种方法;(2)如果您选择第二种方法,您将如何查询该数据?

1 个答案:

答案 0 :(得分:1)

您有几个选择。就个人而言,我会将您项目的所有重要(和类似)数据保存在一个表中,并且有3列包含详细信息ID,然后您可以创建几个不同的表,其中包含每种类型的额外数据{{1}每个查询的数据。

另一个选择是你可以有三个单独的表包含项目,但我不建议,因为它不是很好的数据库设计实践。如果你确实想这样做,你可以在一个查询中从所有三个表中选择:     SELECT * FROM table1,table2,table3

...或使用空值手动匹配列计数并执行JOIN查询:

UNION

...但如果每种类型都有许多独特的列,那么这可能会变得混乱。我建议为每个项目类型的详细信息

分别使用三个表格
SELECT f1, f2, f3, f4, null as f5 FROM table1
UNION ALL
SELECT f1, f2, f2, null as f4, null as f5 FROM table2
UNION ALL
SELECT f1, f2, f3, f4, f5 FROM table3 -- table 3 contains 5 columns as an example