Mysql 在一个查询中更新两个表中的随机记录
鉴于这种结构Mysql 在一个查询中更新两个表中的随机记录,mysql,sql,sql-update,Mysql,Sql,Sql Update,鉴于这种结构 categories{id} product_models{id, category_id} products{product_model_id, category_id} 它已经被填充,但是带有产品模型.category\u id,产品.category\u id和产品.product\u model\u id都设置为NULL,我需要一个查询来“连接”它们,执行以下操作: 将所有产品型号.category\u id设置为categories表中的随机值 将所有产品。产品型号id
categories{id}
product_models{id, category_id}
products{product_model_id, category_id}
它已经被填充,但是带有产品模型.category\u id
,产品.category\u id
和产品.product\u model\u id
都设置为NULL
,我需要一个查询来“连接”它们,执行以下操作:
产品型号.category\u id
设置为categories
表中的随机值产品。产品型号id设置为产品型号表中的随机值
产品.category_id
设置为新分配的产品型号的category_id
记录的值RAND函数在任何查询中只执行一次,并且无论使用多少次,它都有效地“锁定”到单个值。如果我能够理解您的要求,这就是您的要求
Create Procedure usp_insert
as
begin
declare @rand1 int
declare @rand2 int
set @rand1=rand()*10000
set @rand2=rand()*10000
insert into categories (id) values (@rand1)
insert into product_models{id, category_id} values (@rand2,@rand1)
insert into products{product_model_id, category_id} values (@rand2,@rand1)
End
上面的块将在数据库中创建一个过程
要执行该过程,请使用以下代码
exec usp_insert
该过程的每次执行都将在每个表中插入一行
例如
假设生成的随机数为34232345
那么它会的
1.在类别表中插入id为3423的行
2.在product_models表中插入一行,其中3423作为类别_id,2345作为id
3.在product_models表中插入一行,其中3423作为类别_id,2345作为product_model_id
您可以根据自己的要求调整插入查询。您可以通过编写存储过程来实现这一点。您可以给我一些有关方法的指导吗?我可以给您一个如何执行的示例作为答案,如果您愿意,一般的想法是使用游标。太好了!看起来这就是解决方案,但是,难道不能用一个纯sql查询来完成吗?使用联接?不,没有一种方法可以一步完成。您将需要执行多个查询,为什么我们需要这样的查询?它工作正常,没有任何问题。此外,我们已经将其转换为一个存储过程,对您来说,它就像一个查询一样好