2016-11-29 7 views
0

Я пытаюсь построить запрос, который войдет в таблицу. Возьмите некоторые данные из столбца jsonb и затем запросите данные.postgres jsonb с проблемами

WITH id_list AS (
    SELECT 
    data #>> '{embeds, related, content, pinned}' 
    FROM 
    content 
    WHERE 
    site_id = 5 
    AND 
    length(data #>> '{embeds, related, content, pinned}') > 0 
    LIMIT 1 
) 

SELECT 
    id 
FROM 
    content 
WHERE 
    content.id IN id_list 

Когда я запустить первый выбор он возвращается назад

["446001", "445989", "445980", "445962", "445965"] 

, который является правильным, почему я не могу запросить против значений в массиве?

Я также пытался выяснить, удалось ли удалить предел для первого запроса и сгладить результаты, чтобы иметь один большой массив для запроса.

ответ

0

Правильный способ использования WITH должен рассматривать его как таблицу и сделать выбор на нем, например, так:

WITH id_list AS (
    SELECT 
    (data #>> '{embeds, related, content, pinned}') as ids 
    FROM 
    content 
    WHERE 
    site_id = 5 
    AND 
    length(data #>> '{embeds, related, content, pinned}') > 0 
    LIMIT 1 
) 

SELECT 
    id 
FROM 
    content 
WHERE 
    content.id IN (select ids from id_list); 

См https://www.postgresql.org/docs/current/static/queries-with.html для справок о том, как использовать WITH правильно.