Вложенный запрос, возвращающий несколько значений в oracle

#sql #oracle #subquery #sql-update

#sql #Oracle #вложенный запрос #sql-обновление

Вопрос:

У меня есть несколько нулевых значений в моей таблице, я должен обновить эти значения из другой таблицы. Я использую следующий запрос, но вложенный запрос возвращает более одного значения.

 update student st 
set n_id=(select n_id 
          from class cl 
          where st.uid=cl.uid 
          and ( cl.start_date='31-jan-2011' or cl.start_date='28-feb-2011') 
          and st.n_id is null);
 

Как я могу обновить свое поле. Помогите мне выяснить. Спасибо.

Комментарии:

1. вам нужно спросить себя, почему вложенный запрос возвращает более 1 значения? если вы пытаетесь присвоить строке определенное значение, вам, очевидно, нужно возвращать только одно (и правильное) значение, поэтому вам нужно посмотреть, что возвращается в данный момент, и исправить ваше предложение where, чтобы ограничить его тем, что вы действительно хотите.

Ответ №1:

вы можете либо поработать над логикой, либо добавить оператор

 and rownum = 1
 

тогда ваш подзапрос всегда будет возвращать только одну строку (первую .. если она существует)

Комментарии:

1. Это правильно. Однако , @Samurai, прежде чем использовать этот подход, тщательно подумайте и убедитесь, что из всех значений, возвращаемых этим подзапросом, вам действительно все равно, какое из них используется. Если вам не все равно, вам нужно выяснить, какое значение является «правильным», и изменить свой подзапрос, чтобы возвращать только это.