Этот вопрос следует из предыдущего , который я задал здесь. Еще раз, рассмотрим следующий пример
CREATE TYPE dow_id AS
(
tslot smallint,
day smallint
);
CREATE SEQUENCE test_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1;
CREATE TABLE test_composite_array
(
id integer DEFAULT nextval('test_id_seq') NOT NULL,
dx dow_id[]
);
, где я сделал следующее
- определил составной тип
- создал таблицу, которая использует ранее определенный составной введите столбец массива
Теперь я могу go и заполнить эту таблицу. Например,
INSERT INTO test_composite_array (dx) VALUES(ARRAY[CAST(ROW(1,1) AS dow_id),CAST(ROW(1,2) AS dow_id)]);
INSERT INTO test_composite_array (dx) VALUES(ARRAY[CAST(ROW(2,1) AS dow_id),CAST(ROW(2,2) AS dow_id)]);
INSERT INTO test_composite_array (dx) VALUES(ARRAY[CAST(ROW(3,1) AS dow_id),CAST(ROW(3,2) AS dow_id)]);
После чего я могу выполнить следующие запросы
SELECT * FROM test_composite_array;
, что приводит к
id dw
9 {"(1,1)", "(1,2)"}
10 {"(2,1)" , "(2,2)"}
11 {"(3,1)", "(3,2)"}
12 {"(3,1)", " (3, -2) "}
ИЛИ
select id from test_composite_array where ROW(CAST(3 AS SMALLINT),CAST(-2 AS SMALLINT)) = ANY(dx);
, что дает
id
12
Но предположим, что я хочу получить все строки , где значение day
равно 2 - т.е. мне действительно все равно, что такое значение tslot
. В моем примере возвращаемым результатом должны быть строки с id's
10 , 11 и 12 . Мне не ясно, как / могу ли я это сделать.