2017-06-28 11 views
0

他の2つのテーブルのデータをテーブルに挿入しようとしています。表は の製品、カテゴリ、およびproductcategoryテーブルの両方を関連付けるものです。2つのテーブルの選択クエリを、それらを関連付ける第3のテーブルに挿入

したがって、776のカテゴリからIDを取得してから、商品テーブルのすべての商品を 'whatever'のようなものにしてから、それを私の言ったように挿入して、

category_id product_id 
776   123 
776   567 
776   123 
..etc 

私はこのクエリを思いついたが、それは私に0行を挿入する。

INSERT INTO cp8_catalog_category_product 
(category_id, 
product_id 
) 
     SELECT categorias.id, 
       productos.product_id 
     FROM categorias 
      LEFT JOIN cp8_catalog_category_product ON categorias.id = cp8_catalog_category_product.category_id 
      LEFT JOIN productos ON cp8_catalog_category_product.product_id = productos.product_id 
     WHERE categorias.id = 776 
      AND productos.name LIKE '%whatever%' 

注:はい、私はcategoriasでカテゴリIDを持っている:連想テーブルで、category_isが主キーではない、それはcategorias.id

ノートの外部キーであるインデックス付きの列ですテーブルがid = 776であり、プロダクトテーブルに 'whatever'のような名前のproductosテーブルもあります

+0

ジョインをサポートするサンプルデータを表示できますか? –

+0

テーブルからIDを取得して戻しているため、列内または複数の列にわたって一意のインデックスがあると、それ以降の挿入はブロックされます。 –

+0

@paul。まあ、私はcategoriasテーブルからIDを取得していると私は結合テーブルに挿入しようとしています。 – Arminius

答えて

1

LEFT JOINを使用して2つのテーブルを結合する場合、結合の右側で0行が得られることを期待する必要があります。この場合、ほとんどの場合、プロダクトには行がありません。productos.name LIKE '%whatever%'(3番目の表を介して結合)

この場合、%whatever% categoriasを使用してcp8_catalog_category_productを作成し、行を期待してください。これは、生成する接続であり、まだ存在しないためです。

INSERT INTO cp8_catalog_category_product 
(category_id, 
product_id 
) 
     SELECT 776, 
       productos.product_id 
     FROM productos 
     WHERE productos.name LIKE '%whatever%' 

テーブルの行を生成するときは、リテラルを使用するのが一般的です。また、最初にSELECT部分​​に焦点を当て、必要な出力が確実であることを確認してから、テーブルにデータを挿入することをお勧めします。このようにして、複雑なテーブルを小さな部分に分割することができます。

+0

@rafael。私はそれを貼り付けて#1048を取得しました - カラム 'product_id'はnullにできません – Arminius

+0

あなたは何を達成しようとしていますか? –

+0

関連テーブルは、製品が多数に属することができるので、それらが属するカテゴリに属する​​すべての製品とリストを収集します。したがって、ある列はcategory_idであり、次に行を下にして、その776カテゴリに属する​​すべての製品です。 – Arminius

関連する問題