2010-06-07 91 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