#java #database #postgresql #spring-boot #jpa
Вопрос:
Так что у меня есть столик
Node_Mapping(location_id:UUID, node_ids: jsonb)
Соответствующим POJO для этого является
class NodeMapping{ UUID locationId; Setlt;Stringgt; nodeIds; }
Примером данных в таблице является
UUID1 : ['uuid100', 'uuid101'] UUID2 : ['uuid103', 'uuid101']
Поэтому я хочу сделать запрос, например, узнать все locationIds
, что содержит это Listlt;Stringgt; : ['uuid100', 'uuid200', 'uuid300']
Пожалуйста, помогите мне сформировать запрос «В» с помощью JSONB.
Также, пожалуйста, помогите мне создать функцию/SP для ввода этого списка строк и возврата списка идентификаторов местоположения в виде списка/набора..
Я попробовал эту функцию, но она не работает.
CREATE OR REPLACE FUNCTION find_location_ids_for_seller(_seller_id text[]) RETURNS TABLE(location_id text) LANGUAGE plpgsql AS $func$ BEGIN RETURN QUERY SELECT n.location_id::text FROM node_mapping n WHERE n.node_ids IN _seller_id; END $func$;
Комментарии:
1. Не могли бы вы уточнить критерии выбора идентификаторов местоположения : это список идентификаторов местоположения, идентификатор узла которого (a) точно соответствует списку [‘uuid100’, ‘uuid200’, ‘uuid300’] :: jsonb (b) содержит список [‘uuid100’, ‘uuid200’, ‘uuid300’] :: jsonb (c) содержит один или несколько элементов списка [‘uuid100’, ‘uuid200’, ‘uuid300’] :: jsonb (d) …
2. В принципе, [‘uuid100’, ‘uuid200’, ‘uuid300’] это список идентификаторов узлов, содержимое этого списка может принадлежать различным идентификаторам location_id. например, location1UUID — [‘uuid100’], location2UUID-[‘uuid200’, ‘uuid300’] .. Теперь моя цель состоит в том, чтобы я получил список рандомизированных идентификаторов узлов, как указано в примере выше, мой вывод должен быть [‘Location1UUID’, ‘Location2UUID’]
3. И ответом на ваш вопрос будет (с).
Ответ №1:
Запрос для получения идентификаторов узлов, содержащих один или несколько элементов списка _seller_id :: text [], является :
CREATE OR REPLACE FUNCTION find_location_ids_for_seller(_seller_id text[]) RETURNS TABLE(location_id text) LANGUAGE sql AS $func$ SELECT n.location_id::text FROM node_mapping n WHERE n.node_ids :: jsonb ?| _seller_id ; $func$;