1

I have a table with the column names VARCHAR(30) ARRAY NOT NULL and I want to query using a list of names, and return rows where the names column has values which are also in my query list.

names for a certain row will look like: {margret,susan,karen,daren}

Right now I can select using contains and one value

SELECT * FROM test_table WHERE names @> '{"john"}';

^Returns the rows where names array contains john. (As intended).

Everything I try querying using multiple values (ex: `john', 'doe', 'jane') results in errors... here is what I tried and the corresponding errors:

SELECT * FROM test_table WHERE names @> ANY('{"john", "jane"}');

^ERROR:  could not find array type for data type character varying[]
SELECT * FROM test_table WHERE names @> ANY('{"john", "jane"}'::varchar(40));

^ERROR:  op ANY/ALL (array) requires array on right side

1 Answer 1

1

Will this work?

create table testarr(names varchar(10)[] );
insert into testarr values(array['margaret','susan','karen','daren']);
select * from testarr where names && '{"margaret","john"}';
select * from testarr where names && '{"mary","john"}';

Result:

postgres=# create table testarr(names varchar(10)[] );
CREATE TABLE
postgres=# insert into testarr values(array['margaret','susan','karen','daren']);
INSERT 0 1
postgres=# select * from testarr where names && '{"margaret","john"}';
            names
------------------------------
 {margaret,susan,karen,daren}
(1 row)

postgres=# select * from testarr where names && '{"mary","john"}';
 names
-------
(0 rows)

Sign up to request clarification or add additional context in comments.

1 Comment

Yes, I think I need to study SQL some more, that was super simple. Thank you.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.