【问题标题】:SQL Server : looking up multiple indexes for 1 row (and finding those indexes)SQL Server:查找 1 行的多个索引(并找到这些索引)
【发布时间】:2018-11-30 02:18:37
【问题描述】:

现在我的表 data 中有一个名为标签的列。它包括逗号分隔的标签,类型为varchar(254)

我有另一个表lookup,其中将这些标签索引到它们的正确代码。

我在data 表中有另一列,名为code,我想使用基于任何逗号分隔标签的 1 个代码进行填充。

我该怎么做

  1. 动态分离标签
  2. 检查是否在 lookup 表中找到任何标签,如果是,更新我的“代码”字段以反映找到的内容

感谢您的帮助,抱歉,这是一个复杂的问题。

我开始使用子字符串并查找单个标签,但我一次只能做 1 个,并且在获取中间值或结束值时遇到了麻烦。

【问题讨论】:

  • 它包含逗号分隔的标签,类型为 varchar(254)。 这是您的核心问题所在。规范化您的数据并避免这个问题和许多其他问题!

标签: sql sql-server indexing lookup


【解决方案1】:

一种方法是outer apply 使用like

select d.*, l.code
from data d outer apply
     (select top (1) l.*
      from lookup l
      where ',' + d.labels + ',' like '%,' + l.label + ',%'
    ) l;

注意:如果l.label 不是字符串,您可能需要强制转换。

然后,您可以通过创建一个每个标签一行的联结表来开始修复您的数据模型。在单个列中存储多个值不是正确的存储方式。

【讨论】:

  • 感谢您的提示/我试过了,但它似乎仍然只获得第一个值。我会尝试为标签制作更多列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2018-10-26
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
相关资源
最近更新 更多