postgreSQL:表中的多列具有相同的条件:其中COL1喜欢'VALUE'或COL2喜欢'VALUE'



在筛选表中的数据时遇到问题。

SELECT * 
FROM TABLE_NAME 
WHERE COL1 LIKE '%VALUE%' 
OR COL2 LIKE '%VALUE%' 
OR COL3 LIKE '%VALUE%'...;

我想优化这个SQL语句。

我想使用CCD_ 1,但CCD_;VALUE";。

有什么想法吗?

非常感谢。

我试过

SELECT * 
FROM TABLE_NAME 
WHERE 'VALUE' IN (COL1, COL2);

但我预料到

SELECT * 
FROM TABLE_NAME 
WHERE '%VALUE%' LIKE/IN (COL1,COL2);

我可以在PostgreSQL中做到这一点吗?

要回答您的直接问题,您可以将列连接起来,如果要搜索多个值,则可以使用数组。

create table t1 (
col1 text
,col2 text
,col3 text
);
insert into t1 (col1,col2,col3)
values
('foobar', 'bar', 'alpaca')
,('cat','dog','duck');
SELECT 
*
FROM t1
WHERE (col1 ||' '|| col2 ||' '|| col3) ILIKE ANY(ARRAY['%foo%','%bar%', '%cat%'])

https://dbfiddle.uk/?rdbms=postgres_14&fiddle=e54e5ecbdc4c1374d441d6553049fbf

不知道它的性能如何,但我相信它回答了你的直接问题,可能比一长串OR语句更具可读性。

最新更新