【问题标题】:SQL - Join on containsSQL - 加入包含
【发布时间】:2016-05-31 22:38:08
【问题描述】:

我有两张这样的桌子

Table A
server_name
start_time
end_time

Table B
id
description

我想要做的是将两个表连接在一起,看起来像这样

Table C
server_name
start_time
end_time
id
description

我可以加入的唯一方法是在描述中搜索 server_name。

我尝试过使用 like 功能,但这不起作用。它需要与描述中 server_name 列中的内容完全相同

【问题讨论】:

  • 您使用的是哪个 DBMS?

标签: sql sql-server join contains


【解决方案1】:

使用LIKE:

select *
from tableA ta
join tableB tb on tb.description like '%' + ta.server_name + '%'

+ 是 SQL Server 连接。 ANSI SQL 有||,而其他的有concat

扩展版,前后加空格:

select *
from tableA ta
join tableB tb on ' ' + tb.description + ' ' like '% ' + ta.server_name + ' %'

照顾马特吉布森的测试/最伟大的例子。

【讨论】:

  • 当然,如果ta.server_name 是“测试”,tb.description 是“世界上最伟大的服务器!”这将匹配,所以这是否能完美运行取决于description 中实际包含的内容类型。
  • 我正在使用 SQL 服务器,所以我尝试了 + 而不是 ||
  • Matt - 我知道那会匹配,我只是想先得到一些匹配。运行上面的查询后,它是 10 分钟和计数,并且有几百行数据。
  • @DeanFlaherty 如果您有大量数据,在字符串的开头 处使用通配符搜索LIKE 永远不会那么快。即使你有一个索引,它也不能使用索引,因为索引是通过将事物按顺序排序来工作的,而 '%whatever%' 上的匹配显然可以在索引中的任何位置。 (在 SQL Server 术语中,它不是 "search argument", or a SARGable query。)
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2013-06-08
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多