将记录从一个表插入/更新到另一个表,没有明确的连接

时间:2016-08-08 01:47:37

标签: mysql sql

我在一个表格中有一个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。我知道两者之间没有连接键,但我仅限于这种结构。

1 个答案:

答案 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;