sql - Update table using random of multiple values in other table -
consider data:
create table #data (dataid int, code varchar(2), prefix varchar(3)) insert #data (dataid, code) values (1, 'aa') , (2, 'aa') , (3, 'aa') , (4, 'aa') , (5, 'aa') , (6, 'aa') create table #prefix (code varchar(2), prefix varchar(3)) insert #prefix (code, prefix) values ('aa', 'abc') , ('aa', 'def') , ('aa', 'ghi') , ('aa', 'jkl')
i want set prefix
value in #data
random prefix
#prefix
matching code
.
using straight inner join
results in 1 value being used:
update d set prefix = p.prefix #data d inner join #prefix p on d.code = p.code
from reading other questions on here, newid()
recommended way of randomly ordering something. changing join
to:
select top 1 subquery ordering newid()
still selects single value (though random each time) every row:
update d set prefix = (select top 1 p.prefix #prefix p p.code = d.code order newid()) #data d
so, i'm not sure how random prefix each data entry single update statement. kind of loop through #data
table, avoid ever touching loops in sql
, i'm sure slow. actual application of on tens of thousands of records, hundreds of prefixes dozens of codes.
this how it:
update d set prefix = ca.prefix #data d cross apply(select top 1 prefix #prefix p d.dataid = d.dataid , p.code = d.code order newid()) ca
notice d.dataid = d.dataid
. here force sql server
engine reevaluate subquery each row in #data
table.
Comments
Post a Comment