我有这个错误的查询:
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|
答案 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();