您当前的位置: 首页 > 

寒冰屋

暂无认证

  • 1浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

如何使用字符串拆分进行不可能的连接

寒冰屋 发布时间:2022-08-30 19:30:00 ,浏览量:1

目录

不可能的连接

不可能的连接方法

STRING_SPLIT()的工作原理

将STRING_SPLIT()与INNER JOIN一起使用

结论

在本文中,我将向您展示如何使用STRING_SPLIT()来连接两个表。

在本文中,我将向您展示如何使用STRING_SPLIT()连接两个表。我称之为不可能的连接。

我已经多次遇到这种情况,并且总是在处理从两个不同来源导入的数据时。在大多数情况下,它与用户输入数据不一致有关。

不可能的连接

在此示例中,我有两个表,Project和ProjectStatus。我想连接ProjectStatus到Project以在相同的结果中显示Name、ProjectStatus和AccountNumber。

如果你看ProjectStatus,ProjectName是程序员的梦想。代码看起来很棒。另一方面,Project表一团糟。代码隐藏在列值中。

没有办法直接从一个连接到另一个。事实上,只有Project 9108成功连接。

不可能的连接方法

我们使不可能的连接起作用的方法是将ProjectName分成几部分。这样,我们不必连接“F1432 plastic”,但可以查看连接“F1432”或“plastic”部分。

从示例中可以看出,“F1432”是商品ProjectName的一部分,很容易在两个表之间连接。

主要步骤是:

  1. 将热混乱的列分成几块。
  2. 连接这个单独的部分以进行匹配。
  3. 如果匹配,则将两个表连接在一起。

所以现在我们知道这是如何发生的,让我们让它发生。为此,我们将首先了解STRING_SPLIT()。

STRING_SPLIT()的工作原理

STRING_SPLIT()用于将列拆分为单独的部分。它是一种特殊类型的函数,它返回一个表作为其结果。它类似于表值函数。

您可以在我写的这篇文章中了解更多信息STRING_SPLIT(),但总体思路是它采用您要拆分的列和字符,例如分隔值(也称为单词)的空格。

所以STRING_SPLIT(‘F1432 plastic’, ‘ ‘)返回一个有两行的表:

  • F1432
  • Plastic

在我们的示例中,让我们看看在查询Project中使用字符串拆分时会发生什么:

这是带有帐号的标记化表:

select value ProjectName, AccountNumber
from Project
    cross apply string_split(ProjectName, ' ')

这里有几件事需要注意。首先,由于STRING_SPLIT()返回一个表,我们可以在查询中使用它。你会看到我正在使用CROSS APPLY将STRING_SPLIT()结果连接到Project。我这样做可以返回一个结果,显示每个ProjectName值旁边的AccountNumber。

我们现在在最终连接ProjectStatus表中使用这个结果来获得我们的最终结果。

将STRING_SPLIT()与INNER JOIN一起使用

至此,困难的部分已经结束。我们有一个中间结果,其中包括项目“代码”以及帐号。

最后要做的是将其与Project表格相关联。

在以下示例中,我将所有这些放在一起:

Select s.ProjectName, s.ProjectStatus, p.AccountNumber
from ProjectStatus s
    left join (
        select value ProjectName, AccountNumber
        from Project cross apply string_split(ProjectName, ' ')
    ) p on s.ProjectName = p.ProjectName

结论

如果您发现自己需要连接嵌入在另一个字符串中的“代码”,那么您可能会发现STRING_SPLIT()允许您访问“代码”以使连接成功。

本文最初发布于How to do an Impossible Join with String Split - Essential SQL

https://www.codeproject.com/Articles/5326621/How-to-do-an-Impossible-Join-with-String-Split

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0516s