2011-06-02 107 views
2

我得到了和sql express數據庫我需要從中提取一些數據。我有三個領域。 ID,名稱,日期。在數據列中有像「654; 654; 526」這樣的值。是的,分號包括。現在這些數字與另一個表格(兩個字段ID和NAME)相關。 DATA列中的數字與第二個表中的ID字段相關。我怎樣才能通過SQL做一個替換或查找,而不是獲得數字654; 653; 526我得到的名稱字段,而不是..... 查看照片。或許可以解釋這更好的SELECT語句中的SQL查詢

http://i.stack.imgur.com/g1OCj.jpg

+2

這只是殘暴......我確信它違反了一堆規範化規則。 – 2011-06-02 21:04:18

+0

如果有3個值「654; 653; 526」,您是否想要返回所有3個相關聯的名稱? – 2011-06-02 21:07:14

+0

我沒有參與創作。我正在拾起碎片。 – nkuebelbeck 2011-06-02 21:09:17

回答

2

重新設計數據庫,除非這是你在支持第三方數據庫。這永遠不會是一個好設計,絕不應該以這種方式建造。這是你咬下子彈並在情況惡化之前修復它的時代之一。 Yeu需要一個相關的表來存儲這些值。數據庫設計的第一條規則之一是從不在一個字段中存儲多個信息。

而且希望這些不是你真正的字段名稱,它們也是非常可怕的。您需要更多描述性字段名稱。

由於它是第三方數據庫,因此您需要查看拆分函數或創建自己的函數。您將需要將數據轉換爲臨時表或表中的關係表單,以便以後在連接中使用。

+0

他們是假的字段名稱。我無法真正'重做'這一個。 – nkuebelbeck 2011-06-02 21:11:17

+0

沒有辦法有效地查詢這些數據。有黑客,但他們會表現出色。除非您的公司實際上並不擁有數據庫設計,否則您不能重新設計,因爲它來自第三方。 – HLGEM 2011-06-02 21:13:41

+0

第三方數據庫 – nkuebelbeck 2011-06-02 21:19:36

0

這是可以做到的,但它不會是很好的。你應該創建一個標量值函數,它接受帶有id的字符串並返回一個帶有名稱的字符串。

0

這種非規範化結構與值存儲在稱爲PICK的準對象關係數據庫中的方式類似。很酷的數據庫,在很多方面超前,但在其他方面,恐龍。

如果要將多個名稱作爲分隔字符串返回,使用標量函數很容易。如果要將多行作爲表返回,則引擎必須支持返回TABLE類型的函數。