【问题标题】:SQL Server Join columns with wildcardSQL Server 使用通配符连接列
【发布时间】:2014-04-29 12:14:02
【问题描述】:

我需要找到一种方法来使用带有通配符的列名称来连接两个表。这是我的场景:

CREATE TABLE #table1
(
AuthCode varchar(10)

)

INSERT INTO #table1
VALUES ('52201')

SELECT * FROM #table1

JOIN bilact
ON #table1.AuthCode = bilact.byAuthCode

在 bilact 表中,auth code 为 005221(字段为 varchar),当我运行上述查询时,它没有返回任何结果。

我遇到的情况非常复杂,我不想解释为什么我必须这样做,因为这是唯一可行的方法。有没有办法可以在连接中添加带有列名的通配符?谢谢。

【问题讨论】:

  • 您想使用通配符在列中搜索吗?还是要加入名称与通配符模式匹配的任何列?
  • 它是bilact表中的一列,将auth代码存储为varchars。
  • 等一下,您在varchar 列中输入“52201”,在另一个varchar 列中输入“005221”并且想要大致匹配它们?
  • 谢谢你问西蒙,如果更容易我会去搜索!我将如何编写将两列与通配符进行比较的 Where 语句?哪里 AuthCode = byAuthCode?​​span>
  • 您是否希望加入两个表,其中一列是另一列的子字符串。这些字符串都不匹配另一个作为子字符串,而是它们共享字符 522。您是否尝试在共享子字符串的两列上进行匹配?或者是另一个的子字符串?

标签: sql-server join


【解决方案1】:

假设您希望一列成为另一列的子字符串:

SELECT * FROM #table1 JOIN bilact ON str(bilact.byAuthCode) LIKE '%' + #table1.AuthCode + '%'

或者,如果您需要匹配任一表中的子字符串

SELECT DISTINCT * FROM #table1 JOIN bilact ON str(bilact.byAuthCode) LIKE '%' + #table1.AuthCode + '%' OR #table1.byAuthCode LIKE '%' + str(bilact.AuthCode) + '%'

如果两列都是 varchars 或某种形式的字符串字段,您可以删除 str()。

否则,您需要确定 2 列共同需要的最长公共子字符串,并在连接中,遍历其中一列的每个可能的子字符串,然后对另一列执行上述操作。

【讨论】:

  • 这有一些关于此方法的性能影响的附加信息:stackoverflow.com/questions/10019557/…
  • 是的,它并不快。如果您可以将通配符限制在末尾,那会快很多。
  • 但我不想再猜测他的要求
  • 顺便说一句,当我在这里尝试时,这些都没有给我任何结果:rextester.com/RUI55926
  • 好吧@shree.pat18 在该示例中您将两次插入同一个表中。另外,我不确定他的要求,因为我认为其中一个是另一个的子字符串,但不是从上面的示例中,我意识到我错过了它。
猜你喜欢
  • 1970-01-01
  • 2015-10-19
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多