一个数据表有N列,现给出一个值,如某一行中任一列含有该值则返回该行,通常的写法在where语句中添加每一列作为查询条件,如:
og3=# create table t1(id int,c1 varchar,c2 varchar,c3 varchar);
CREATE TABLE
og3=# insert into t1 values(1,'c1','c2','c3');
INSERT 0 1
og3=# insert into t1 values(2,'t1','t2','t3');
INSERT 0 1
og3=# select * from t1 where id::text ~ 'c1' or c1 ~ 'c1' or c2 ~ 'c1' or c3 ~ 'c1';
id | c1 | c2 | c3
----+----+----+----
1 | c1 | c2 | c3
(1 row)
PostgreSQL提供了Row数据类型,可以把整行转换为该类型后跟输入值进行匹配,如存在则输出:
og3=# select t.* from t1 t where t::text ~ 'c1';
id | c1 | c2 | c3
----+----+----+----
1 | c1 | c2 | c3
(1 row)
og3=# select t from t1 t where t::text ~ 'c1';
t
--------------
(1,c1,c2,c3)
(1 row)