【发布时间】:2018-08-15 20:45:54
【问题描述】:
我有一张包含产品的表格和一张包含产品评论的表格。产品表具有父产品和子产品。父产品应该得到子产品的所有评论。我做到了:
DROP TABLE IF EXISTS products;
CREATE TABLE products (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent` int(10) unsigned DEFAULT NULL,
`review` decimal(3,2) DEFAULT NULL,
PRIMARY KEY(id)
);
DROP TABLE IF EXISTS reviews;
CREATE TABLE reviews (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product` int(10) unsigned NOT NULL,
`review` decimal(3,2) DEFAULT NULL,
PRIMARY KEY(id)
);
INSERT INTO products SET id=1, parent=null;
INSERT INTO products SET id=2, parent=1;
INSERT INTO products SET id=3, parent=1;
INSERT INTO reviews SET product=2, review=5;
INSERT INTO reviews SET product=3, review=5;
INSERT INTO reviews SET product=3, review=4;
INSERT INTO products SET id=4, parent=null;
INSERT INTO products SET id=5, parent=4;
INSERT INTO reviews SET product=5, review=4;
INSERT INTO reviews SET product=5, review=2;
UPDATE products
SET products.review=
(SELECT SUM(reviews.review)/COUNT(reviews.review) FROM reviews
LEFT JOIN products p ON p.parent = products.id
)
WHERE products.parent IS NULL;
但是我很惊讶我收到了一个错误:
错误 1054 (42S22):“on 子句”中的未知列“products.id”
关于如何正确执行的任何建议?这个想法是产品 1 应该得到 14/3 = 4.66 的评论,产品 4 应该得到 6/2 = 3 的评论。
【问题讨论】:
-
我收到错误 1093,而不是 1054。您使用的是什么版本?
-
感谢您正确提出 SQL 问题(重现您的示例数据库所需的 SQL)
-
将产品更新为 p1 SET p1.review= (SELECT SUM(reviews.review)/COUNT(reviews.review) FROM reviews where reviews.product = p1.id ) WHERE p1.parent IS NULL;
-
我正在使用 mysql 版本 5.7.21。
标签: mysql