包含第二个表列表中的字符串的SQL搜索行

时间:2016-11-14 13:56:09

标签: sql

我有一个主表,其中包含要搜索的字符串列表。如果单元格中的任何字符串包含来自主查找表的文本,则返回TRUE / FALSE。目前我使用excel的

=SUMPRODUCT(--ISNUMBER(SEARCH(masterTable,[@searchString])))>0

有没有办法在SQL中做这样的事情?如果字符串相等,LEFT JOIN或OUTER APPLY将是简单的解决方案;但他们需要包含..

SELECT *
FROM t
WHERE col1 contains(lookupString,lookupColumn)


--that 2nd table could be maintained and referenced from multiple queries
hop
bell
PRS
2017

如果行包含查找表中的任何字符串,我想要的结果将是显示TRUE / FALSE的列

 SEARCH_STRING      Contained_in_lookup_column
 hopping                 TRUE
 root                    FALSE
 Job2017                 TRUE
 PRS_tool                TRUE
 hand                    FALSE

2 个答案:

答案 0 :(得分:1)

抱歉,我现在无法访问数据库以确认语法,但应该是这样的:

SELECT t.name,
case when (select count(1) from data_table where data_col like '%' || t.name || '%' > 0) then 'TRUE' else 'FALSE' end
FROM t;

SELECT t.name,
case when exists(select null from data_table where data_col like '%' || t.name || '%') then 'TRUE' else 'FALSE' end
FROM t; 

塞尔吉奥

答案 1 :(得分:0)

您可以将%通配符与LIKEEXISTS结合使用。

示例(使用Oracle语法) - 我们有一个包含数据的v_data表和一个包含查询术语的v_queries表:

with v_data (pk, value) as (
  select 1, 'The quick brown fox jumps over the lazy dog' from dual union all
  select 2, 'Yabba dabba doo' from dual union all
  select 3, 'forty-two' from dual
),
v_queries (text) as (
  select 'quick' from dual union all
  select 'forty' from dual
)
select * from v_data d
where exists (
  select null 
  from v_queries q
  where d.value like '%' || q.text || '%');