我有两个表,一个有产品,另一个有分类的产品,两个表看起来都像:
CREATE TABLE `oclh_product` (
`product_id` int(11) NOT NULL,
`mpn` varchar(64) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `oclh_product_to_category` (
`product_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
我需要从表oclh_product中更新oclh_product.mpn,如果oclh_product_to_category中的product_id等于某个数字,例如等于26。
我尝试像这样进行sql查询:
UPDATE `oclh_product` INNER JOIN `oclh_product_to_category`
ON oclh_product_to_category.category_id = oclh_product.product_id
SET oclh_product.mpn = '99999' WHERE `oclh_product_to_category`.`category_id` = 26;
就像这样:
UPDATE `oclh_product` INNER JOIN `oclh_product_to_category`
ON oclh_product_to_category.category_id = '26'
SET oclh_product.mpn = '99999';
没有成功。对于这个UPDATE语句有什么建议吗?
发布于 2020-11-09 22:54:54
如果使用正确的JOIN
条件,您的第一个查询应该可以工作。使用TRable别名可以更轻松地执行操作:
UPDATE oclh_product p INNER JOIN
oclh_product_to_category pc
ON pc.product_id = p.product_id
SET p.mpn = '99999'
WHERE pc.category_id = 26;
如果您在mpn
中存储数字,为什么类型是字符串?最好使用某种类型的数字类型。
发布于 2020-11-09 23:57:31
我发现了错误,正确的查询是:
UPDATE `oclh_product` INNER JOIN `oclh_product_to_category`
ON oclh_product_to_category.product_id = oclh_product.product_id
SET oclh_product.mpn = '99999' WHERE `oclh_product_to_category`.`category_id` = 26;
再次谢谢你戈登·利诺夫。
https://stackoverflow.com/questions/64753920
复制相似问题