Выбрать записи по списку идентификаторов из подзапроса?

В базе данных PostgreSQL я делаю такой запрос SQL:

SQL:

SELECT 
    ARRAY_AGG (QUESTION_ID) AS QUESTIONS 
FROM 
    factors_questions_relationship 
WHERE 
    FACTOR_ID IN (SELECT ARRAY_AGG (FACTOR_ID) AS FACTORS 
                  FROM surveys_factors_relationship 
                  WHERE SURVEY_ID = '9bef1274-f1ee-4879-a60e-16e94e88df38');

ОШИБКА:

Ошибка возникновения этого запроса SQL:
Ошибка SQL [42883]: ОШИБКА: оператор не существует: целое = целое[]
Ни один оператор не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явное приведение типов.

Второй подзапрос возвращает список идентификаторов: {2,10,12,44,52}. Я хочу использовать этот список идентификаторов в основном запросе. Как сделать это правильно?


person Nurzhan Nogerbek    schedule 27.03.2019    source источник


Ответы (1)


Вы можете попробовать ниже -

SELECT ARRAY_AGG (QUESTION_ID) AS QUESTIONS FROM factors_questions_relationship 
where FACTOR_ID IN 
(
   SELECT FACTOR_ID AS FACTORS FROM surveys_factors_relationship 
   WHERE SURVEY_ID = '9bef1274-f1ee-4879-a60e-16e94e88df38'
)
person Fahmi    schedule 27.03.2019
comment
Привет! Я проверил ваш код прямо сейчас. К сожалению, возникает ошибка: SQL Error [42803]: ERROR: aggregate functions are not allowed in WHERE. У тебя есть другие идеи? - person Nurzhan Nogerbek; 27.03.2019
comment
Я не знаю почему, но ваш код возвращает пустой результат. На самом деле, если я сделаю такой запрос sql SELECT ARRAY_AGG (QUESTION_ID) AS QUESTIONS FROM factors_questions_relationship WHERE FACTOR_ID IN (2,10,12,44,52), у меня будет результат вроде {7,8,9,10,11,12,39,40,41,42,43,47,48}, что правильно. Что ты об этом думаешь? - person Nurzhan Nogerbek; 27.03.2019
comment
@NurzhanNogerbek, я отредактировал ответ - теперь можете проверить - person Fahmi; 27.03.2019