Ответы пользователя по тегу JSON
  • Как получить все записи с определенным значением в поле JSONB?

    @e11it
    У вас, в колонке tags содержатся массивы целочисленных(на мой взгляд тип колонки выбран не удачно и лучше использовать array), а вы используете оператор поиска строки. Надо использовать оператор @> и искать пересечение массивов.

    Пример:
    CREATE TABLE aaa
    (
      id serial NOT NULL,
      tags jsonb,
      CONSTRAINT aaa_pk PRIMARY KEY (id)
    );
    
    -- Значения - integer
    INSERT INTO aaa(tags)
        VALUES ('[1, 2, 3]'::jsonb);
    
    INSERT INTO aaa(tags)
        VALUES ('[2, 4, 1]'::jsonb);
    
    -- Пример для оператора ? , элемент "1" - строка
    INSERT INTO aaa(tags)
        VALUES ('[9, 9, "1"]'::jsonb);
    
    -- ------------------------------------------
    select * from aaa where tags @> '[1]'::jsonb;
    -- OUTPUT:
    -- id | tags
    -- 1  | [1, 2, 3]
    -- 2  | [2, 4, 1]
    
    -- вывести записи где есть строка "1"
    select * from aaa where tags ? '1';
    -- OUTPUT:
    -- id | tags
    -- 3  | [9, 9, "1"]


    Ссылка на документацию...
    Ответ написан
    Комментировать