Создал составной тип:
CREATE TYPE public.full_code AS ( class smallint, subclass smallint, "group" character varying(2), subgroup character varying(2), sort character varying(2), subsort character varying(2) );
CREATE TABLE public."Documents" ( document_id integer NOT NULL, document_type_id integer NOT NULL, document_name text NOT NULL, document_short_name text, full_code full_code, path_file text);
Пытаюсь сделать такой запрос:
SELECT document_name FROM public."Documents" WHERE document_type_id = 1 AND full_code = (1,1,00,00,00,00) ORDER BY document_id
и получаю ошибку: не удалось сравнить различные типы столбцов smallint и integer, столбец записи 1. SQL-состояние: 42804
SELECT document_name FROM public."Documents" WHERE document_type_id = 1 AND full_code = (1,1,'00','00','00','00') ORDER BY document_id
то же пробовал. Результат такой же.
Запрос выполняется если делать так:
SELECT document_name FROM public."Documents" WHERE document_type_id = 1 AND (full_code).class = 1 AND (full_code).subclass = 1 AND (full_code).GROUP = '00' AND (full_code).subgroup = '00' AND (full_code).sort = '00' AND (full_code).subsort = '00' ORDER BY document_id
Существует ли компактный вариант для сравнения составных типов ?
Пробуй SELECT document_name
Пробуй
Так возникает ошибка: не
Так возникает ошибка: не удалось сравнить различные типы столбцов character varying и unknown, столбец записи 3. SQL-состояние: 42804
Работает вот так :
SELECT document_name FROM PUBLIC."Documents" WHERE document_type_id = 1 AND full_code = (1::SMALLINT,1::SMALLINT,'00'::VARCHAR ,'00'::VARCHAR,'00'::VARCHAR,'00'::VARCHAR) ORDER BY document_id
Додумал сам, спасибо за помощь! Но почему работает не понимаю.