我有一张看起来像这样的表。我想获得像
这样的数据 1.2,“我的名字是”,1.6,“厄尔”,12345,“Rock Hard Awesome”我认为这种架构不可能,但想知道我是不是错了。我尝试过交叉连接,但不仅仅是实际值。
应该完成的是值表被写了很多次(对于大量的值)但是描述表具有静态的唯一值,并且通过将它们放在单独的表中它们不会被写入一遍又一遍。
Values Table
Column names = DataID1|DataID1Value|DataID2|DataID2Value|DataID3|DataID3Value
Row values = 1 1.2 2 1.6 3 12345
Description Table
Column names = DescriptionID1|Description
Row value = 1 "My name is"
Row value = 2 "Earl"
Row value = 3 "Rock Hard Awesome"
答案 0 :(得分:3)
这个怎么样:
SELECT DISTINCT v.DataID1Value, d1.Description,
v.DataID2Value, d2.Description,
v.DataID3Value, d3.Description
FROM Values v
INNER JOIN Description d1 on d1.DescriptionID = v.DataID1
INNER JOIN Description d2 on d2.DescriptionID = v.DataID2
INNER JOIN Description d3 on d3.DescriptionID = v.DataID3
答案 1 :(得分:0)
就个人而言,我不会那样存储数据。你拥有的本质上是一个查找表,它与许多只有一个列的列相关联。因此,您必须为要查看其描述的每个列加入它。这是可能的,但会导致可怕的性能问题,因为这张桌子将成为锁定的噩梦。
如果您有不更改的静态值,请查找它们(如果您希望在表单上使用它们,请将它们用于下拉)并将它们存储在insert上的值表中。然后,您只能查询一个表。
然后去阅读有关EAV表格以及它们是什么问题以及为什么它们在数据库设计方面缺乏技术。
这就是你查询当前表的方法。请注意,您多次加入它以获取每个值所需的信息。 d1,d2,d3是您在同一个表中有多个连接时所需的不同别名。
SELECT DISTINCT v.DataID1Value, d1.Description,
v.DataID2Value, d2.Description,
v.DataID3Value, d3.Description
FROM Values v
INNER JOIN Description d1 on d1.DescriptionID = v.DataID1
INNER JOIN Description d2 on d2.DescriptionID = v.DataID2
INNER JOIN Description d3 on d3.DescriptionID = v.DataID3