从两个表插入select查询到与之关联的第三个表

时间:2017-06-28 13:10:20

标签: mysql sql

我正在尝试从其他2个表中插入表中的数据。表格是: 产品,类别以及与产品类别表相关联的产品,类别。

所以,它需要从类别中获取id,即776,然后从products表中获取名称为'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的外键。

注意:是的,我在分类表中有一个id = 776的类别ID,我在productos表中也有产品,其名称类似于'what'

1 个答案:

答案 0 :(得分:1)

如果使用LEFT JOIN连接2个表,则必须预期连接的右侧可能会给出0行。在这种情况下,最有可能的productos没有行productos.name LIKE '%whatever%'给定类别(通过第3个表加入)

在这种情况下,您只需要获取名称为%any%的所有产品,并将它们分配给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部分​​并将其工作到您确定这是您需要的输出,然后将数据插入表中。通过这种方式,您可以将非常复杂的表分解为更小的部分。