Reputation: 101
--This query is returning a "too many values" error. I'm not sure why?
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);
Upvotes: 0
Views: 219
Reputation: 1269443
I think your intention is better served using 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
);
Upvotes: 0
Reputation: 49260
The error too many values
is because the query has value1 IN ()
where multiple columns are being selected in the inner query. To avoid this, just select
value1 in the inner query.
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
)
Upvotes: 1