在筛选表中的数据时遇到问题。
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
语句更具可读性。