如何编写 SQL 语句以对九个不同的值使用“LIKE”? [复制]

Posted

技术标签:

【中文标题】如何编写 SQL 语句以对九个不同的值使用“LIKE”? [复制]【英文标题】:How to write an SQL statement to use "LIKE" for nine different values? [duplicate] 【发布时间】:2011-04-25 13:48:44 【问题描述】:

我必须选择所有记录:

where FIELD2 like '%value21%'
or FIELD2 like '%value22%'
or FIELD2 like '%value23%'
-- repeat up to
or FIELD2 like '%value29%'

这里,value21, ..., value29 是用户可以在提交查询之前放入表单中的参数。它们是(不是后续的)数字代码,FIELD2 是一个包含字符串值的数据库列。

写下我的 SQL 查询的最简洁的形式是什么?

注意:这与an earlier question有关,但这需要LIKE而不是equals。

【问题讨论】:

如果您告诉我们value21..value29 是什么,这将极大地帮助我们 @Arjan,你是对的:我已经更新了我的问题。现在解释数据库结构对我来说太难了。您有什么具体问题吗? @Sathya, value21,...,value29 是(不是后续的)数字代码,用户可以在提交查询之前输入表单。 我的意思是:什么数据库供应商/方言?而且您可能想要性能最好的查询,而不是最紧凑的形式。 @Arjan:没有办法从这样的查询中获得良好的性能。根据定义(col like '%val%')不能使用任何索引,所以它将是一个表扫描。 【参考方案1】:

恐怕你被困住了:

  WHERE (FIELD2 LIKE '%value21' OR 
         FIELD2 LIKE '%value22' OR 
         FIELD2 LIKE '%value23' ...)

至少在标准 SQL 中(您的特定引擎可能会提供某种形式的全文索引,这会有所帮助)。

这样的查询通常表明数据库设计中存在规范化问题,多个值存储在单个字段值中。如果您的情况是这样,并且您对数据库架构有任何程度的控制,我建议尽快解决问题。否则,请检查您的医疗保险以确保它涵盖 SQL 引起的精神病——这会让您发疯。

【讨论】:

+1 表示“我建议尽快解决问题”。好建议 呃,有什么问题你不建议解决吗? @Robus:解决方案比持续问题更昂贵的任何地方。【参考方案2】:

一种方式:

select Field1, Field2 from Table where Field2 like '%val%'
UNION
select Field1, Field2 from Table where Field2 like '%val2%'
UNION
select Field1, Field2 from Table where Field2 like '%val2%'

等等

【讨论】:

不是 UNION ALL,我认为,因为某些行可能匹配几个不同的条件。我认为只要 PK 包含在选定字段列表中,就可以使用“常规”UNION。 @Larry:相应调整。谢谢

以上是关于如何编写 SQL 语句以对九个不同的值使用“LIKE”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL之慢SQL语句

PostgreSQL之慢SQL语句

sql语言如何查询一条记录中含有两个关键字?

如何使用sql语句使一个列的值变成另一个字段的值

sql数据库--存储过程增删改查四个语句?

delphi中如何使用SQL语句结果