sql – 在INNER JOIN的一部分中使用LIKE子句
在构建存储过程/查询时,是否可以使用LIKE标准作为INNER JOIN的一部分?我不知道我在问什么,所以让我解释一下.
我正在创建一个过程,将在包含文本的列中获取要搜索的关键字列表.如果我坐在控制台,我会执行它: SELECT Id,Name,Description FROM dbo.Card WHERE Description LIKE '%warrior%' OR Description LIKE '%fiend%' OR Description LIKE '%damage%' 但是,在一个存储过程中,我选择了一些“强类型”列表解析的一个技巧是将列表解析成表变量/临时表,将其转换为正确的类型,然后对该表执行INNER JOIN在我的最终结果集.当向过程发送一个整数ID的列表时,这很好.我结束了一个最终的查询,如下所示: SELECT Id,Description FROM dbo.Card INNER JOIN @tblExclusiveCard ON dbo.Card.Id = @tblExclusiveCard.CardId 我想用一个字符串列表来使用这个技巧.但是,由于我正在寻找一个特定的关键字,我将使用LIKE子句.所以理想情况下,我想我最后的查询如下所示: SELECT Id,Description FROM dbo.Card INNER JOIN @tblKeyword ON dbo.Card.Description LIKE '%' + @tblKeyword.Value + '%' 这可能/推荐吗? 有没有更好的方法来做这样的事情? 我在这个条款的两端放通配符的原因是因为在卡片文本中使用了“archfiend”,“beast-warrior”,“direct-damage”和“battle-damage”这两个术语. 我得到的印象是,根据性能,我可以使用我指定的查询或使用全文关键词搜索来完成相同的任务吗? 除了让服务器在我想要文本搜索的字段上做文本索引之外,还有什么我需要做的吗? 解决方法您的第一个查询将工作,但将需要完整的表扫描,因为该列上的任何索引将被忽略.您还必须执行一些动态SQL来生成所有的LIKE子句.如果您使用SQL Server或查看Lucene实现之一,请尝试使用全文搜索.乔尔最近谈到他的成功. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 为什么使用EXECUTE IMMEDIATE运行此查询会导致它失败
- Mysql 5.7.19 winx64 ZIP Archive 安装及使用过程问题小结
- Windows下MySQL安装配置方法图文教程
- sqlserver实例无法加锁或者多于一个的连接时处理方法
- sqlcmd将无法运行 – 这是配置问题吗?
- 通过sqlserver日志恢复误删除的数据
- 关于SQLServer2000中windows身份验证Builtin/Administrator
- sql – 为什么RAND()不生成随机数?
- sql – 如何使用JDBC更新Oracle Clob
- SqlServer 2005中使用row_number()在一个查询中删除重复记录