Однострочный подзапрос возвращает более одной строки в Oracle

Я пытаюсь написать запрос в 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')
);

Я смущен, почему это дает эту ошибку снова и снова. Пожалуйста, помогите

Вам необходимо сопоставить подзапрос, который вы обновляете, с обновляемыми строками. Поле может быть обновлено только одним значением, а не несколькими значениями. Однако что это значит, что вы не можете просто сделать update ... set resale_am = target_resale where ...?

Boneist 28.05.2019 13:21
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наиболее вероятная проблема здесь:

set resale_am = (select target_resale 
                 from Quote_line_part_quantity 
                 where quote_id = 100218906
                )

Лучший способ решить эту проблему неясен, но добавление and rownum = 1 решит вашу насущную проблему.

Вы можете подумать, что это спасло ваш день, но все, что он сделал, это устранил ошибку. Нет никакой гарантии, что вы действительно получите желаемый результат. Как указывалось ранее, вы пытались обновить одно значение строки с результатом, возвращающим несколько значений. Теперь вам нужно решить, какое из этих множественных значений является правильным. В результирующем наборе нет внутреннего порядка, поэтому простое добавление «rownum = 1» вернет ровно одну строку случайный.

EdStevens 28.05.2019 13:52

@ЭдСтивенс. . . Возвращаемое значение нет "случайное". Это неопределенно.

Gordon Linoff 28.05.2019 14:28

@GordonLinoff - вы подтолкнули меня быстро прочитать «рандмон» и «неопределенный». Как бы вы ни классифицировали эту проблему, конечный результат один и тот же ... OP, использующий просто «где rownum = 1», чтобы ограничить результаты одним значением, ничего не делает для управления строкой который, которая предоставляет значение для использования. т. е. не знает, выбрал ли он для операции строку правильный.

EdStevens 28.05.2019 16:56

Другие вопросы по теме