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

标签 sql sql-server design-patterns

在构建存储过程/查询时,我可以/应该使用 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”术语。

我的印象是,根据性能,我可以使用指定的查询或使用全文关键字搜索来完成相同的任务?

除了让服务器对我想要文本搜索的字段进行文本索引之外,我还需要做什么吗?

最佳答案

试试这个

    select * from Table_1 a
    left join Table_2 b on b.type LIKE '%' + a.type + '%'

这种做法并不理想。谨慎使用。

关于sql - 在 INNER JOIN 的一部分中使用 LIKE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20484/

相关文章:

c# - 如何强制派生类重写仅返回其类名的方法?

php - 带有复选框的 POST

sql - 哪一个性能更好: Derived Tables or Temporary Tables

sql-server - SQL Server 中电话号码的限制

c# - 使用 C# 实现 SQL 的动态参数计数

c# - 是否有执行一系列超时的模式?

php - 如何使用php从sql显示不带0小数的双 float

php - 酒店预订查询

mysql - 在触发器中更新后更新同一行

java - 全局保存 String 类型值的更好方法?