2011-06-02 108 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类型的函数。