ОШИБКА: более одной строки, возвращенной подзапросом, используемым в качестве выражения - PullRequest
0 голосов
/ 17 мая 2018

ER Диаграмма:

enter image description here

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

Я пытался:

UPDATE products SET current_stock=
(SELECT p.current_stock FROM sales 
INNER JOIN products AS p ON product_id=p.id
WHERE sold_count=(SELECT sold_count FROM sales
WHERE sold_count < sold_count * sold_count * 0.2 )) + 1;

Но у меня было это сообщение об ошибке:

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

I 'используя PostgreSQL

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Операторы типа <, =,>, ... ожидают, что скалярный результат будет возвращен из подзапроса. Если он возвращает несколько, это все равно, что сравнивать яблоко с массивом апельсинов.

Я не совсем понимаю вопрос, это то, что вы пытаетесь сделать?

UPDATE products
  FROM ( SELECT S.product_id,
                CASE WHEN S.sold_count >= SUM(S.sold_count) OVER() THEN P.current_stock + 1
                     ELSE P.current_stock
                 END adjusted_Stock
           FROM sales S
          INNER 
           JOIN product P 
             ON S.product_id = P.id
       ) AS UPDT
   SET current_stock = UPDT.adjusted_Stock
 WHERE id = UPDT.product_id;
0 голосов
/ 17 мая 2018

Я нашел решение:

UPDATE products SET current_stock = current_stock + 1
WHERE id = (SELECT p.id FROM sales 
INNER JOIN products AS p ON product_id=p.id
WHERE sold_count < sold_count * sold_count * 0.2
GROUP BY p.id);

Мне пришлось использовать ГДЕ p.id = ...

0 голосов
/ 17 мая 2018

Вы пытаетесь обновить current_stock с помощью подзапроса, поэтому подзапрос должен возвращать строку ONE , ONE столбец ( ONE значение).

Ваш запрос возвращает более одной строки - возможно, здесь:

SELECT sold_count 
FROM sales
WHERE sold_count < sold_count * sold_count * 0.2

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

При обновлении из подзапроса необходимо убедиться, что результатом запроса является только одно значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...