我在一个表格中有一个sku列表,我需要在另一个表格中以与excel相同的方式分配给产品ID,方法是从一列sku中复制记录并将其粘贴到产品列旁边id从第一行开始。我想用更新查询或其他方法执行此操作。
table1: tmp_pid
fields: pid, sku
这是我有随机数量的pid记录的地方。 sku字段是空的。我正试着用下一张桌子上的日期填写它。
table2: tmp_sku
fields: sku, used
这是我保留一份很长的独特sku列表以及它们是否已被使用的地方。
我尝试了这个查询,但它不起作用([错] 1054 - 'IN / ALL / ANY子查询'中的未知列'tmp_sku.sku')
UPDATE tmp_pid
SET tmp_pid.sku = tmp_sku.sku
WHERE tmp_sku.sku IN (SELECT sku FROM tmp_sku WHERE used = NO )
Table1可以有20或1000个pid记录,Table2有10000个未使用的sku。我只需要复制Table1中20-1000 pid记录旁边所需的sku。我知道两者之间没有连接键,但我仅限于这种结构。
答案 0 :(得分:0)
如果我理解正确,你想得到这个结果:
select p.*, s.sku
from (select p.*, (@rnp := @rnp + 1) as n
from tmp_pid p cross join (select @rnp := 0) params
order by pid
) p join
(select s.*, (@rns := @rns + 1) as n
from tmp_sku s cross join (select @rns := 0) params
where used = 'NO'
order by sku
) s
on p.n = s.n;
如果是这样,您可以根据更新进行调整:
update tmp_pid p join
(select p.*, (@rnp := @rnp + 1) as n
from tmp_pid p cross join (select @rnp := 0) params
order by pid
) pp
on p.pid = pp.pid join
(select s.*, (@rns := @rns + 1) as n
from tmp_sku s cross join (select @rns := 0) params
order by sku
) s
on pp.n = s.n
set p.sku = s.sku;