通过循环遍历行来更新表

时间:2015-02-16 16:11:23

标签: mysql

我有这个错误的查询:

update product prod set 
  prod.id = (select fur.p_id 
    from furnisher fur 
    where prod.row number = fur.row number 
  )

我想要做的是将p_id从table furnisher的第一行设置为table product的第一行的id。 其他元素也一样...... 我没有找到执行查询的确切语法(我的dbms是mySql)

例如我有:

product |id|name |....
        |1 |prod1| 
        |2 |prod2| 

...

fournitsher  p_id|activation_date|status|...
             500 |'01-01-205'    | true |
             1000|'01-01-205'    | true |

...

我的桌面产品现在应该包含:

product |id   |name |....
        |500  |prod1| 
        |1000 |prod2|  

2 个答案:

答案 0 :(得分:1)

由于您只想对第一行执行此操作,因此可以使用limit实现此目的。请注意,既然你想要第一行,它应该给一个订单,否则它是不合逻辑的,因为我们真的不知道“第一”是什么意思。所以按照你想要的任何顺序排序

update furnisher a
join (select p_id
        from furnisher
        order by any_field
        limit 1) b using(p_id)
set a.p_id = (select id 
              from product prod
              order by any_field
              limit 1);

答案 1 :(得分:0)

我尝试了这个解决方案,它解决了我的问题:)

CREATE PROCEDURE ROWPERROW()
BEGIN
 DECLARE n INT DEFAULT 0;
 DECLARE i INT DEFAULT 0;
 SELECT COUNT(*) FROM product INTO n;
 SET i=0;
 WHILE i<n DO 
  update  product set id = ( select p_id from furnisher  LIMIT i,1);
  SET i = i + 1;
 END WHILE;
End;
;;

然后我打电话给我的程序

call ROWPERROW();