2016-06-21 1 views
0

- Cette requête renvoie une erreur "too many values". Je ne suis pas sûr pourquoi?SQL avec clause WITH trop de valeurs erreur

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); 

Répondre

1

L'erreur too many values est parce que la requête a value1 IN() où plusieurs colonnes sont sélectionnés dans la requête interne. Pour éviter cela, entrez select value1 dans la requête interne.

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

Je pense que votre intention est mieux servi en utilisant 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 
       );