我正在尝试从其他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'
答案 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部分并将其工作到您确定这是您需要的输出,然后将数据插入表中。通过这种方式,您可以将非常复杂的表分解为更小的部分。