【发布时间】:2019-11-20 05:34:15
【问题描述】:
我有一个如下的 sql 选择:
select * from table1 where text in (select text from table2)
in clausule 中的实际选择比 this 更复杂。 text 是字符串(varchar)。如何扩展该sql以从table1中选择行,其中text 类似于来自table2的文本(不仅完全等于)?
【问题讨论】:
标签: sql
我有一个如下的 sql 选择:
select * from table1 where text in (select text from table2)
in clausule 中的实际选择比 this 更复杂。 text 是字符串(varchar)。如何扩展该sql以从table1中选择行,其中text 类似于来自table2的文本(不仅完全等于)?
【问题讨论】:
标签: sql
如果您在 Table2 的文本列中有通配符表达式,您可以这样做。
select *
from Table1 as T1
where exists (select *
from Table2 as T2
where T1.[text] like T2.[text])
否则您需要在查询中添加%。
select *
from Table1 as T1
where exists (select *
from Table2 as T2
where T1.[text] like '%'+T2.[text]+'%')
【讨论】:
类似这样的:
select *
from table1
where exists
(
select *
from table2
where table1.text like N'%'+table2.text+N'%'
)
注意
这可能是性能杀手
【讨论】:
我知道我在这里聚会迟到了,但是如果您需要通配符文本作为查询的一部分(就像我所做的那样),您也可以使用 JOIN 来执行此操作。假设您在 table2.text 中有所有要检查的条目,
SELECT *
FROM table1 t1
INNER JOIN table2 t2
ON t1.text LIKE '%' + t2.text + '%'
【讨论】: