使用类似语法的 SQL IN 语句? [复制]

Posted

技术标签:

【中文标题】使用类似语法的 SQL IN 语句? [复制]【英文标题】:SQL IN Statement using like syntax? [duplicate] 【发布时间】:2011-02-02 16:22:27 【问题描述】:

我想做这样的事情,即在 in 子句中使用通配符:

SELECT * FROM mytable WHERE keywords IN ('%test%', '%testing%')

SQL Server 不支持这个....有没有其他方法可以实现...

寻找以下以外的东西:

SELECT * FROM mytable WHERE keywords like '%test%' or keywords like '%testing%' or.....

【问题讨论】:

我认为您的实际用法更复杂,但在您提供的示例中,您只需要 LIKE '%test%',因为匹配 '%testing%' 的任何内容也匹配 '%test%'。此外,如果您可以控制您的数据库结构,您最好规范化关键字的存储。 @larry lustig:我只是在举一个玩具例子......我想做一些复杂的事情......谢谢 【参考方案1】:

不,我能想到的唯一其他方法是加入临时表,但是您必须消除重复的行。

你的这个查询效率非常低,因为它会无条件地进行表扫描。也许您应该考虑分离关键字或引入全文索引。

如果您想研究全文搜索,那么我建议您在评估 Sql Server 全文解决方案时研究一些重量级的东西,例如 sphinx 或 lucene。

【讨论】:

【参考方案2】:
SELECT DISTINCT *
FROM
  mytable M
  JOIN
  (
  SELECT '%test%' AS pattern
  UNION ALL SELECT '%testing%'
  ...
  ) foo ON M.keywords LIKE foo.Pattern

也可以是 CTE 或临时表

【讨论】:

@OMG 小马:绝对。哇! 关于性能的注释,最好的情况(1 个关键字)这将与原来的一样快。在最坏的情况下,由于distinct,它会根据行宽慢几倍 @Sam Saffron:如果没有适当的文本搜索,无论如何都会很差【参考方案3】:

这在 MS SQL 中不受支持.... 是 还有其他方法可以实现吗?

是的,Full Text Search. 至少是for prefix wildcards。

【讨论】:

【参考方案4】:

您可以使用正则表达式来做到这一点。 在一个正则表达式中,您可以在一个表达式中定义任意数量的模式。

有很多关于 MS SQL SERVER 中的正则表达式匹配的文章。 我在 MySQL 中使用 RLIKE 进行正则表达式匹配。

我还附上了 link1 和 link2 用于 MS SQL SERVER 正则表达式匹配。

【讨论】:

以上是关于使用类似语法的 SQL IN 语句? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'

SQL语句基本语法

SQL Server参数化SQL语句中的like和in查询的语法(C#)

SQL Server参数化SQL语句中的like和in查询的语法(C#)

SQL Server参数化SQL语句中的like和in查询的语法(C#)

我怎样才能逆IN语法?