【问题标题】:SQL select from table where column contains specific stringsSQL select from table where column contains specific strings
【发布时间】:2014-04-29 16:12:41
【问题描述】:

我有一个表,其中包含需要搜索的字符串 [如下图]

表A

之后,我有一个存储数据的表 [如下图]

表B

而搜索功能的作用是仅当记录包含 TableA 中的字符串时才从 TableB 中进行选择 [i.e.预期的结果应该如下图(TableC)]

TableC

我尝试过使用下面的SQL,但是SQL在尝试运行[Incorrect syntax near 'select']时出现了一些错误,而且SQL有点复杂,有什么方法可以让SQL更简单吗?

select * from TableB a 
where exists 
    (select colA from TableB b 
        where b.colA = a.ColA and Contains (b.ColA, select searchCol from TableA))

【问题讨论】:

  • 我不太确定答案,但我认为您必须在表 2 上使用 LIKE,您所使用的表达式将来自表 1。
  • 但是如何“喜欢”多个值进行搜索?
  • 包含函数,第二个参数需要文本。您不能在其中使用 Select 。这里有一些信息 (msdn.microsoft.com/query/…)

标签: sql sql-server aggregate-functions


【解决方案1】:

请尝试:

select 
  a.* 
From tblA a inner join tblB b 
    on b.Col like '%'+a.Col+'%'

SQL Fiddle Demo

【讨论】:

  • OP从tableB而不是tableA请求数据,你需要添加一个DISTINCT或者,使用OP数据,'cdefg'行将被返回两次
【解决方案2】:

根据我的情况,其中一个应该可以工作

SELECT b.colA 
FROM TableB b join TableA a
WHERE colA like '%' + a.ColA + '%';


SELECT b.colA
FROM TableB b join TableA a
WHERE INSTR(b.colA, '{' + a.colA + '}') > 0;

【讨论】:

    【解决方案3】:
    SELECT b.* FROM tblA a,tblB b
    WHERE PATINDEX('%'+a.Col+'%',b.Col)>0
    

    SQL FIDDLE DEMO

    我已经搜索了 PATINDEX 和 LIKE 之间的性能差异,但没有得到确凿的答案,有人说 PATINDEX 在无法使用索引时更快,即当要搜索的模式包含在通配符中时,例如 '%'+a .Col+'%' 而其他帖子提到它们可以实现类似的性能。

    也许一些 SO SQL 向导可以看到水晶球并向我们展示光明

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多