在单个查询中更新2个表中的随机记录

时间:2013-02-06 07:36:47

标签: mysql sql sql-update

鉴于此表结构,

categories{id}
product_models{id, category_id}
products{product_model_id, category_id}

哪些已经填充,但product_models.category_idproducts.category_idproducts.product_model_id都设置为NULL,我需要一个将所有人“连接”起来的查询,以下:

  1. 将所有product_models.category_id设置为categories
  2. 中的随机值
  3. 将所有products.product_model_id设置为product_models table
  4. 中的随机值
  5. 将每个products.category_id设置为新分配的product_models记录的category_id值。
  6. 可以在SINGLE查询中完成吗?

2 个答案:

答案 0 :(得分:1)

没有

RAND函数仅在任何查询中执行一次,并且无论使用多少次,都会有效地“锁定”到单个值。

答案 1 :(得分:1)

如果我能够理解您的要求,这就是您的要求

 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

每次执行该过程都会在每个表中插入一行 例如 假设生成的随机数为3423,2345 然后它会 1.在类别表中插入一行,其中3423为id 2.在product_models表中插入一行,其中3423为category_id,2345为id 3.在product_models表中插入一行,其中3423为category_id,2345为product_model_id

您可以根据需要调整插入查询。