使用LIKE或IN表达式中的搜索模式列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LIKE或IN表达式中的搜索模式列表相关的知识,希望对你有一定的参考价值。

问题是:我有一份销售报价清单,其中很多都没有效,因为它们只是在实践或培训系统中。通常,引号名称包含单词“Test”或“Dummy”。 (在某些情况下,quote_name包含'Prova' - 恰好是'Test'的意大利语。

鉴于我无法轻松控制要搜索的字符串列表,我决定将列表保留在第二个表中 - “搜索条件”。一个简单的一列表,其中包含一系列术语('Test','Prova','Dummy',...)。

在Amazon Redshift中,我尝试了一个简单的CASE语句:

CASE WHEN UPPER(vx.quote_name) LIKE ('%' + UPPER(terms.term) + '%') THEN 'Y' ELSE 'N' END AS "Any DPS"

但是,这似乎只能获得列表中的第一个搜索词。

此外,对于相同的报价,由于销售多个商品可能有多行,我通常会将一行设置为“Y”,其余设置为“N”。

我将语句修改为:

---- #4a: get a list of the quotes whose quote_names match the patterns in the list
SELECT 
vx.master_quote_number, 
'Y' AS "Any DPS"

FROM t_quotes vx, any_dps_search_families terms

WHERE UPPER(vx.prod_fmly) IN ('%'+ UPPER(terms.term) +'%'); 

--- 4b: merge Any DPS results back in

select vx.*, dps."Any DPS"
from t_quotes vx
LEFT JOIN transform_data_4 dps ON (vx.master_quote_number = dps.master_quote_number)

但那也不是这样做的。

环境:亚马逊Redshift(主要是像Postgres)。 Postgres的答案是理想的。如果需要,我可以将此子句切换到mysql,但我不愿意。

答案

这是横向连接(未经测试)的情况:

SELECT vx.master_quote_number
FROM any_dps_search_families terms
   CROSS JOIN LATERAL (SELECT master_quote_number
                       FROM t_quotes
                       WHERE UPPER(prod_fmly)
                             LIKE ('%' || UPPER(terms.term) || '%')
                      ) vx;

以上是关于使用LIKE或IN表达式中的搜索模式列表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL SELECT with LIKE in java Servlet MySQL 错误

改进 sql 中的文本搜索

正则表达式或 LIKE 模式的转义函数

mysql模糊匹配查询like,regexp,in

在关系代数表达式里面如何表示sql中的模糊查询呢,比如“like”,"in"这样的语句。下 面的这个例子:在一个

MySQL中的通配符与正则表达式