2017-06-28 41 views
0

我想插入到表中,其他表中的數據。這些表格是: 產品,類別以及將產品類別表格關聯的產品類別。插入到從兩個表中選擇查詢到第三個表關聯它們

因此,它需要從類別(即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%' 

注意:在關聯表,category_is是不是主鍵,這是一個索引列,它是categorias.id的外鍵

注:是的,我有categorias種類ID我有一個productos表中的產品,其名稱類似於'whatever'

+0

可以顯示支持連接的示例數據嗎? –

+0

您正在查詢某個表中的id並將其重新放入,因此如果您在列中或跨多個列中具有唯一索引,則會阻止進一步的插入。 –

+0

@paul。好吧,我從categorias表中獲取id,並試圖將它插入到關聯表中。 – Arminius

回答

1

如果您使用LEFT JOIN連接2個表格,則必須期望連接的右側可能會給出0行。在這種情況下,最有可能的productos沒有行,其中給定類別的productos.name LIKE '%whatever%'(通過第三表加入)

在這種情況下,您只需獲取名稱爲%whatever的所有產品並將其分配給category_id 776.您無法加入productos到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 - Column'product_id'不能爲空 – Arminius

+0

你想達到什麼目的? –

+0

關聯表收集所有產品和列表,它們屬於哪個類別,因爲產品可以屬於很多類別。所以,一列是category_id,然後是行,屬於該類別的所有產品。 – Arminius

相關問題