2016-06-21 3 views
0

-이 쿼리는 "너무 많은 값"오류를 반환합니다. 왜 그런지 모르겠다. 쿼리가 복수의 열이 내부 질의에서 선택되는 value1 IN() 있기 때문에WITH 절이 너무 많은 SQL 오류

update myTable 
      set var1= var2 
      WHERE value1 IN (

      WITH X AS 
      (
      select value1, value2, var1,var2, ROW_NUMBER() 
      OVER 
      (PARTITION BY value1 ORDER BY value1 desc) as rn 
      from 
       mytable WHERE var1 is null AND rownum>0 and rownum<=10 order by value1 asc 
      ) 
      SELECT 
      value1, value2, var2,var1 
      FROM X WHERE rn=1 and var1 is null and rownum>0 and rownum<=10); 

답변

1

오류 too many values이다. 이를 방지하려면 내부 쿼리에서 select 값 1을 사용하십시오.

update myTable 
set var1 = var2 
WHERE value1 IN 
    (select value1 from 
     (select value1, value2, var1,var2, 
     ROW_NUMBER() OVER (PARTITION BY value1 ORDER BY value1 desc) as rn 
     from mytable 
     WHERE var1 is null 
     ) t 
     where rn <= 10 
    ) 
0

나는 exists을 사용하여 역임 당신의 의도가 더 나은 생각 :

update myTable 
    set var1 = var2 
    where exists (select 1 
        from (select value1, value2, var1, var2, 
           ROW_NUMBER() OVER (PARTITION BY value1 ORDER BY value1 desc) as rn 
         from mytable 
         where var1 is null 
        ) x 
        where mytable.value1 in (x.value1, x.value2, x.var1, x.var2) and 
         rn <= 10 
       ); 
관련 문제