2010-06-07 95 views
0

我有一个看起来像这样的表格。我想得到这样是否可以查询这些表?

1.2,“我的名字是”数据,1.6,“伯爵”,12345“石坚真棒”

我不认为这是可能的这个模式,但希望看看我是否错了。我尝试了一个交叉连接,但有可能不仅仅是实际的值。

应该完成的是值表被编写了很多次(对于大量的值),但是描述表具有静态的唯一值,并且通过将它们放在单独的表中,它们不会得到一遍又一遍地写。

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" 

回答

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 
+0

我想你错过了我写的东西的一部分,也许帮助我证明了为什么我认为这是不可能的。 请注意你有Desc2和Desc3。但是这些不存在于我目前的模式中。 如果我错了,请更正/原谅我。 – Maestro1024 2010-06-07 13:28:21

+0

将Desc1,Desc2,Desc3替换为Desc,并从缺少的Decsription表名中运行查询 – Bharat 2010-06-07 13:33:19

+0

Appart,此选择为您提供输出并提供给定的输入。如果这不是你所需要的,你应该更新你的问题。 – 2010-06-07 13:34:59

0

个人而言,我不会存储数据的方式。你所拥有的基本上是一个查询表,它与许多只有一个列的列相关联。所以你必须加入到你想查看描述的每一列。这是可能的,但会导致可怕的表现问题,因为这张桌子将成为锁定的噩梦。

如果您的静态值不会更改,请查看它们(如果您希望在表单上使用它们)并将它们存储在插入值表中。那么你只能查询一个表。

然后去阅读关于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 
+1

这是我写的同一个查询:) – 2010-06-07 14:04:51

+0

NOt挺好的,你的错,因为它将表重名为表两次。 – HLGEM 2010-06-07 14:39:27