2013-04-05 1 views
3

Я преобразовываю несколько строк в массив с помощью функции array_agg(), , и мне нужно передать этот массив в select statement where condition.Postgresql Выберите из значений в массиве

Мой запрос,

SELECT * FROM table WHERE id = 
    ALL(SELECT array_agg(id) FROM table WHERE some_condition) 

, но он дает ошибку, как я могу прийти через это ..

+0

и который ошибка? – h22

+0

какая ошибка вы получаете ?? –

+0

ERROR: оператора не существует: bigint = bigint [] СОВЕТ: оператор не соответствует указанному имени и типу аргументов. Возможно, вам придется добавлять явные типы. –

ответ

3

ошибка была очищена от типа литья массива, используя мой запрос, как этот

SELECT * FROM table WHERE id = 
    ALL((SELECT array_agg(id) FROM table WHERE some_condition)::bigint[]) 

reference link

1

Похоже, что вы чрезмерно усложнять вещи. Насколько я могу судить, ваш запрос должен быть эквивалентен просто:

SELECT * FROM table WHERE some_condition 

Или, если вы выбираете из 2 разных таблиц, использование присоединиться:

SELECT table1.* 
FROM table1 
JOIN table2 ON table1.id = table2.id 
WHERE some_condition 

Не только это проще, это также быстрее, чем возиться с массивами.

+0

Мне нужно взять подсчет записей, –

+0

Это не было упомянуто в вашем вопросе. что случилось с 'SELECT count (*) ...'? – mvp

Смежные вопросы