0

このテーブル構造を考えると、

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

これはすでに入力されていますが、product_models.category_idproducts.category_idおよびproducts.product_model_idすべてが に設定されNULLている場合、次のようにして、すべてを「接続」する単一のクエリが必要です。

  1. allをテーブルproduct_models.category_idのランダムな値に設定しますcategories
  2. allをテーブルproducts.product_model_idのランダムな値に設定しますproduct_models
  3. eachproducts.category_idを、新しく割り当てられたproduct_modelsレコードの category_id の値に設定します。

SINGLEクエリで実行できますか?

4

2 に答える 2

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

プロシージャを実行するたびに、各テーブルに 1 行が挿入されます。たとえば、生成された乱数が 3423,2345 であると仮定すると、1. id として 3423 の行がカテゴリ テーブルに挿入されます。 id として 2345 3. product_models テーブルに、category_id として 3423、product_model_id として 2345 を持つ行を挿入します。

要件に応じて挿入クエリを調整できます。

于 2013-02-06T09:29:55.123 に答える
1

いいえ

RAND 関数は、どのクエリでも 1 回だけ実行され、何度使用されても実質的に 1 つの値に「ロック」されます。

于 2013-02-06T08:10:09.240 に答える