0

テーブル内の一連のレコードを選択し、2 番目の選択に基づいて、最初の選択からテーブルに新しいレコードを書き込むシナリオがあります。

選択してから書き込みたいテーブルは次のとおりです。

弾丸
-------
ID
製品コード
catalogue_category_id
bullet_text
sort_sequence

Note id はキーであり、自動インクリメント整数です

次のようにレコードを選択します。

SELECT product_code, catalogue_category_id, bullet_text, sort_sequence 
  FROM bullets 
 WHERE product_code = '10001'

この製品の場合、これにより 4 行が与えられます。箇条書きの数は製品ごとに異なる場合があります。結果は次のとおりです。

10001, , テストの箇条書き - 10001,  
10001, , 2 番目の箇条書き,  
10001, , 3 番目の箇条書き,  
10001、、、第4弾、

この場合、catalogue_category_id と sort_sequence は空ですが、常にそうであるとは限りません。

次に、いくつかの製品コードを選択して、この場合は箇条書きごとに 4 つのレコードを記述します。

製品コードのリストを取得する 2 番目の select ステートメントは次のとおりです。

SELECT product_code 
  FROM master 
 WHERE product_group = '1' 
   AND product_code != '10001'

これにより、17 個の製品コードが返されますが、選択されている product_group に応じて、それより少ない場合も多い場合もあります。

新しいレコードは次のとおりです。

id - これは自動インクリメントされます
product_code - これは、2 番目の select ステートメントからの新しい製品コードになります。
catalogue_category_id - これは、最初の選択ステートメントから選択されたデータになります
bullet_text - これは、最初の select ステートメントから選択されたデータになります。
sort_sequence - これは、最初の select ステートメントから選択されたデータになります

したがって、この例では、17 の製品コードごとに 4 つずつ、合計 68 の新しいレコードを箇条書きに書き込みます。

これを行うにはストアドプロシージャが必要だと思いますが、検索して、見た結果に頭を悩ませることはできません。どんな助けでも大歓迎です。

68 個のレコードが新しいレコードとして Bullets テーブルに書き込まれます。選択されたレコードには、入力された 4 つのフィールドのすべてまたは任意の組み合わせが含まれる場合があります。

product_code、catalogue_category_id、bullet_text、sort_sequence

基本的に、ID と製品コードを除いて、選択したレコードを複製しようとしています。たとえば、3 つの製品コードがあるとします。

10002、10003、10004

2 番目の select ステートメントを使用して返された場合、12 個の新しいレコードを取得します。最初の SELECT ステートメントの最初の 4 つとほぼ同じ 4 つのセットが 3 つあり、ID は自動インクリメントされ、製品コードは次のようになります。

最初の 4 つの新しいレコードの場合は 10002
次の 4 つの新しいレコードには 10003
最後の 4 つの場合は 10004

各分野ごとに選んだものを書いていきます。選択した 4 つのレコードのうち 2 つが catalogue_category_id フィールドにデータを持つ例を使用すると、68 個の新しいレコードのうち 34 個が catalogue_category_id フィールドにデータを持つことになります。

4

1 に答える 1

0

ここで答えたように、必要なのはCROSS JOIN

INSERT INTO bullets (product_code, catalogue_category_id, bullet_text, sort_sequence) 
SELECT m.product_code, b.catalogue_category_id, b.bullet_text, b.sort_sequence
  FROM bullets b CROSS JOIN master m
 WHERE b.product_code = 10001
   AND m.product_group = 3
   AND m.product_code <> 10001;

これがSQLFiddleのデモです

于 2013-07-14T19:17:23.670 に答える