Я пытаюсь написать запрос в Oracle, который будет возвращать несколько строк, но с этим запросом я получаю «Подзапрос с одной строкой возвращает более одной строки», я пытался использовать операции IN вместо оператора «=», но я не могу это сделать, это мой запрос
Update Quote_line_part_quantity
SET
resale_am =(
select target_resale
FROM Quote_line_part_quantity
where quote_id=100218906
)
WHERE
quote_id=100218906
AND quote_line_no IN(
SELECT
quote_line_no
FROM
Quote_Line
WHERE
quote_id IN 100218906
AND quote_line_no=(1)
AND Quote_line_status_cd IN('R','A')
);
Я смущен, почему это дает эту ошибку снова и снова. Пожалуйста, помогите


Наиболее вероятная проблема здесь:
set resale_am = (select target_resale
from Quote_line_part_quantity
where quote_id = 100218906
)
Лучший способ решить эту проблему неясен, но добавление and rownum = 1 решит вашу насущную проблему.
Вы можете подумать, что это спасло ваш день, но все, что он сделал, это устранил ошибку. Нет никакой гарантии, что вы действительно получите желаемый результат. Как указывалось ранее, вы пытались обновить одно значение строки с результатом, возвращающим несколько значений. Теперь вам нужно решить, какое из этих множественных значений является правильным. В результирующем наборе нет внутреннего порядка, поэтому простое добавление «rownum = 1» вернет ровно одну строку случайный.
@ЭдСтивенс. . . Возвращаемое значение нет "случайное". Это неопределенно.
@GordonLinoff - вы подтолкнули меня быстро прочитать «рандмон» и «неопределенный». Как бы вы ни классифицировали эту проблему, конечный результат один и тот же ... OP, использующий просто «где rownum = 1», чтобы ограничить результаты одним значением, ничего не делает для управления строкой который, которая предоставляет значение для использования. т. е. не знает, выбрал ли он для операции строку правильный.
Вам необходимо сопоставить подзапрос, который вы обновляете, с обновляемыми строками. Поле может быть обновлено только одним значением, а не несколькими значениями. Однако что это значит, что вы не можете просто сделать
update ... set resale_am = target_resale where ...?