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查询来完成吗?使用联接?不,没有一种方法可以一步完成。您将需要执行多个查询,为什么我们需要这样的查询?它工作正常,没有任何问题。此外,我们已经将其转换为一个存储过程,对您来说,它就像一个查询一样好