如何编写 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”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章