2013-08-08 3 views
0

Итак, я написал функцию postgreSQL, которая должна выполнять поиск в таблице на основе огромного количества дополнительных входных параметров, которые я группирую с множеством операторов AND. Это один, однако:Функция PostgreSQL несколько строк, возвращаемых из подзапроса в случае case

AND 
(
(newcheck IS NULL) 
    OR 
    ( 
    newcheck IS NOT NULL AND product.id IN(
    CASE WHEN newcheck='New' 
     THEN 
     (SELECT product.id FROM product WHERE product.anew IS true) 
    ELSE 
     (SELECT product.id from product WHERE product.anew IS false) 
    END) 
    ) 
) 

дает мне

ERROR: more than one row returned by a subquery used as an expression 

Это не будет помощи много, так как я хочу, чтобы вернуть намного больше, чем один ряд. Значения переменной newcheck будут отправляться из раскрывающегося меню в виде веб-формы, поэтому это могут быть только «Новые» или «Старые». Любые идеи о том, что может вызвать эту проблему?

+0

Проблема - каждый подзапрос возвращает более одной строки и 'CASE' оператор ожидает один результат в каждой отрасли. –

ответ

1

Попробуйте что-то вроде:

AND ((newcheck IS NULL) 
    OR (newcheck IS NOT NULL 
     AND product.id IN (SELECT product.id 
          FROM product 
          WHERE product.anew = CASE WHEN newcheck='New' 
                 THEN true 
                 ELSE false 
               END)) 
+0

Хорошо, что, кажется, отлично работает, когда я устанавливаю newcheck на что-либо, кроме «New». В случае, когда он «Новый», я получаю только одну строку ... –

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