2016-06-21 33 views
0

- Diese Abfrage gibt einen Fehler "zu viele Werte" zurück. Ich bin mir nicht sicher warum?SQL mit WITH-Klausel zu viele Werte Fehler

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

Antwort

1

Der Fehler too many values ist, da die Abfrage value1 IN() hat, bei der mehrere Spalten in der inneren Abfrage ausgewählt werden. Um dies zu vermeiden, nur select value1 in der inneren Abfrage.

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

Ich denke, Ihre Absicht ist besser exists served mit:

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