当前位置: 首页 > 面试题库 >

在INNER JOIN的一部分中使用LIKE子句

贡和裕
2023-03-14
问题内容

可以/应该在构建存储过程/查询时将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, Name, Description
  FROM dbo.Card
       INNER JOIN @tblExclusiveCard ON dbo.Card.Id = @tblExclusiveCard.CardId

我想将此技巧与字符串列表一起使用。但是,由于我要查找特定的关键字,因此我将使用LIKE子句。因此,理想情况下,我想我的最终查询应如下所示:

SELECT Id, Name, 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的实现之一。乔尔(Joel)最近谈到了他的成功。



 类似资料:
  • 问题内容: 在命名查询的where子句中可能有一个like?我正在尝试执行以下操作,但出现异常 我尝试像在普通SQL中那样添加%,但是得到了异常编译。 任何指针,不胜感激! 谢谢 问题答案: 您不能在中添加%,但可以在为其分配参数的值中包含它。 如:

  • 问题内容: 我想将参数表达式用作in子句的一部分。我想查询在一组Bar中具有Bar的Foos列表。这可能吗? 问题答案: 使用表达式时,您只能使用基本比较类型,因此您需要进行联接并比较基本类型的字段(在此我已经使用过):

  • 本文向大家介绍如何在MySQL LIKE子句中使用用户变量?,包括了如何在MySQL LIKE子句中使用用户变量?的使用技巧和注意事项,需要的朋友参考一下 使用该函数,我们可以在LIKE子句中使用用户变量。语法如下。 为了理解上述语法,让我们首先创建一个表。创建表的查询如下。 使用insert命令在表中插入记录。查询如下。 使用select语句显示表中的所有记录。查询如下 以下是输出。 这是在LI

  • 问题内容: 我如何在hibernate中使用。我想在文件中使用SQL 。我有2个查询,我要合并为1个。 查询如下所示: 我也试过了。我使用了不带like子句的方法,它起作用。但是不起作用。 包装的异常: 这就是我传递参数的方式: 试过|| 并得到以下异常: 问题答案: 也许user_id不是char / varchar?您必须先将带有str()的user_id转换为字符数据! 例:

  • 问题内容: 可以说我有这样的第一张桌子 分支表 第二张桌子是这样的 余额表 我想查询余额表,其中每一行包含分支表的名称。例如分支表中的“ 123456ABC”,我想从余额表中获取“ ABC”行 我怎样才能做到这一点?到目前为止,我还没有尝试过这个查询 有什么建议吗? 问题答案: 你应该 转换 了的名称模式: 联接看起来更易读:

  • 问题内容: 我想以以下方式实现sql查询: 我该如何使用或上面提到的方法来做到这一点? 问题答案: 是一个方法从查询类。 您可以尝试这样的事情。