mitaichik
@mitaichik

Как искать по массиву комплексных типов?

Всем привет.

Есть у меня комплексный тип user_rating :
userId : int
isExpert : bool
rating : integer

Есть таблица tbl_ratings
id : int
ratings : user_rating[]

Как видно - поле ratings - массив комплексного типа user_rating.

Из этой таблицы надо выбрать все строки, в поле ratings (массив ) содержится хотя бы один элемент, у которой isExpert = true.

Я нашел решение как можно сделать условия для конкретного элемента:

SELECT * FROM tbl_ratings WHERE (ratings[1]."isExpert") = true

Но как сделать чтоб искал по всему массив? То есть убрать этот индекс 1?

Заранее спасибо )
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
mitaichik
@mitaichik Автор вопроса
В общем, не нашел ничего лучше чем написать простенькую функцию:

CREATE OR REPLACE FUNCTION acc_has_expert_rating(ratings acc_rating[])
    RETURNS bool AS
$$
DECLARE
		rating acc_rating; 
BEGIN

	FOREACH rating IN ARRAY ratings
	LOOP 
			IF rating."isExpert" THEN 
				RETURN TRUE;
			END IF;
	END LOOP;

  RETURN false;
END;
$$
LANGUAGE 'plpgsql';
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@eoffsock
Кодер (Rails)
Нашел возможное решение, попробуйте:

SELECT * FROM tbl_ratings WHERE id IN 
    (SELECT id FROM 
        (SELECT id, unnest(ratings) AS list_item FROM tbl_ratings) explode
        WHERE (explode.list_item).isExpert = true)
Ответ написан
@krypt3r
Но как сделать чтоб искал по всему массив?

ANY()? ALL()?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы