使用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 错误