Как использовать сцепление с "IN" и несколько значений из JSON? - PullRequest
0 голосов
/ 14 января 2019

Я фильтрую свою таблицу с данными об автомобилях на основе значений, полученных в json "cars". Если json не содержит какого-либо атрибута, этот параметр пропускается для фильтрации. Если бренд - «Ferrari», а цвет - «красный», а год - «2019», я хочу увидеть все красные феррари, выпущенные в 2019 году. Если просто бренд - «Ferrari», а в моем json отсутствует цвет или атрибут года, я хочу чтобы увидеть все красные Ferrari.

Я создал свой код, используя concatenate, но он работает только со значениями одного параметра. Я не могу понять, как заставить его работать как с красным, так и с черным ferrari одновременно или для всех автомобилей, выпущенных в 2017, 2018 и 2019 годах. Как извлечь несколько значений из json? Я буду благодарен за всю помощь.

CREATE FUNCTION mycar (cars json) 
  RETURNS TABLE (brand varchar, colour varchar, year int4, owner varchar)
  AS $$
  DECLARE
  BEGIN
  RETURN QUERY
   SELECT brand, colour, year, owner 
   FROM car_table
   WHERE table_brand=coalesce((cars::json->>'brand'),table_brand)
   and table_year=coalesce((cars::json->>'year')::int,table_year)
   and table_colour=coalesce((cars::json->>'colour'),table_colour);
 RETURN;
END;
$$ LANGUAGE plpgsql;
...