SQL Server:如何按Table2的Type筛选未匹配Introduce的Table1记录
解决方法:结合Type字段筛选未匹配的Table1记录
我懂你要实现的需求了——你已经能查询出Table1里那些Name或Surname没出现在Table2的Introduce字段中的记录,现在想通过Table2的Type字段进一步缩小这个结果范围,对吧?
直接把Type的筛选条件加到子查询的WHERE子句里就行,这样NOT EXISTS只会检查符合指定Type的Table2记录,而不是所有Table2数据。修正后的SQL代码如下:
SELECT t1.Name, t1.Surname FROM Table1 t1 WHERE NOT EXISTS ( SELECT 1 FROM Table2 t2 -- 这里添加Type的筛选条件,替换成你实际需要的Type值 WHERE t2.Type = '目标类型' AND ( t2.Introduce LIKE '%' + t1.Name + '%' OR t2.Introduce LIKE '%' + t1.Surname + '%' ) )
逻辑说明
- 子查询里先限定了
Table2中Type符合要求的行,这样我们只在这些行里检查是否包含Table1的Name或Surname NOT EXISTS的作用是:如果在所有符合指定Type的Table2记录里,都找不到包含当前Table1行的Name或Surname的内容,那么这条Table1的记录就会被保留在结果里
小提示
- 如果你的
Type字段是数值类型,去掉单引号直接写数值就行,比如t2.Type = 1 - 这种模糊匹配(
LIKE '%xxx%')在数据量很大的时候可能会有性能问题,如果是生产环境大数据量场景,可以考虑给Introduce字段建立全文索引来优化查询速度
内容的提问来源于stack exchange,提问作者n0rek
相关产品推荐
相关产品推荐

