R10-11 查询用户评分为5星的商品的评论信息(多表查询) 分数 10 作者 冰冰 单位 广东东软学院 本题目要求编写SQL语句, 结合sh_goods表和sh_goods_comment表,查询用户评分为5星的商品对应的评论信息。 提示:请使用SELECT语句作答。 表结构: CREATE TABLE sh_goods ( id INT PRIMARY KEY, --商品id category_id INT NOT NULL DEFAULT 0 , -- 商品分类id name VARCHAR(120) NOT NULL, --商品名称 keyword VARCHAR(255) NOT NULL, -- 关键词编号 content TEXT NOT NULL , --商品详情 price DECIMAL(10, 2) NOT NULL DEFAULT 0 , --价格 stock INT NOT NULL DEFAULT 0, -- 库存 score DECIMAL(3, 2) NOT NULL DEFAULT 0 , -- 用户评分 comment_count INT NOT NULL DEFAULT 0 -- 评论数量 ) ; CREATE TABLE sh_goods_comment ( id INT PRIMARY KEY, -- 评论id user_id INT NOT NULL DEFAULT 0, -- 用户id goods_id INT NOT NULL DEFAULT 0 , -- 商品id content TEXT NOT NULL , -- 评论内容 is_show TINYINT NOT NULL DEFAULT 0, -- 是否显示 create_time INT NOT NULL DEFAULT 0 -- 创建时间 ) ; 表样例 sh_goods表: sh_goods表数据.PNG sh_goods_comment表: sh_goods_comment表数据.PNG 输出样例: 答案.PNG
时间: 2025-03-28 12:08:29 浏览: 192
<think>嗯,用户想编写一个SQL查询,从sh_goods和sh_goods_comment这两个表中筛选出用户评分为5星的商品的评论信息。首先,我需要确定这两个表的结构以及它们之间的关联关系。通常,商品表(sh_goods)和评论表(sh_goods_comment)之间应该是通过商品ID进行关联的,比如sh_goods.id和sh_goods_comment.goods_id。这样的话,就可以用INNER JOIN来连接这两个表,条件是商品ID相等。
接下来,用户需要筛选出评分为5星的记录。根据引用[1]中的第6个查询,应该是在sh_goods_comment表中有一个评分字段,比如score,然后筛选出score等于5的情况。所以WHERE子句应该是sh_goods_comment.score = 5。
然后要考虑选择哪些字段。根据引用[1]的问题6,输出可能包括商品评论信息,所以可能需要选择评论相关的字段,比如评论内容、评分、用户ID等。同时,如果用户需要显示商品的信息,比如商品名称或ID,可能还需要从sh_goods表中选择这些字段。比如SELECT sh_goods.id, sh_goods.name, sh_goods_comment.content, sh_goods_comment.score。
还要注意表的别名使用,这样可以让SQL语句更简洁。比如FROM sh_goods AS g INNER JOIN sh_goods_comment AS c ON g.id = c.goods_id,然后在SELECT中使用g.id, g.name, c.content等。
另外,是否需要去重?如果同一个商品可能有多个5星评论,用户可能需要显示所有符合条件的评论,所以不需要使用DISTINCT,除非有特别要求。
还要确认评分字段的数据类型是否是整数,如果是,那么条件应该是=5;如果是字符串类型,可能需要用='5',但根据引用[2]中提到的是“5星好评”,可能字段存储的是数值类型,所以应该用=5。
最后,根据引用[1]中的问题6,正确的语法应该是通过JOIN连接两个表,并在WHERE中过滤评分。或者,也可以用显式的JOIN条件加上ON子句,或者在JOIN的时候就把评分条件放进去。不过通常建议在ON子句中处理连接条件,而过滤条件放在WHERE中,但这里评分是评论表的属性,所以放在WHERE中更合适。
综合起来,正确的SQL语句应该是:
SELECT g.id AS 商品ID, g.name AS 商品名称, c.content AS 评论内容, c.score AS 评分
FROM sh_goods AS g
INNER JOIN sh_goods_comment AS c ON g.id = c.goods_id
WHERE c.score = 5;
这样就能正确连接两个表,并筛选出5星评论的信息了。</think>以下是实现多表查询获取5星商品评论信息的SQL解决方案:
1. **使用INNER JOIN关联两个表**
```sql
SELECT g.id AS 商品ID,
g.name AS 商品名称,
c.content AS 评论内容,
c.score AS 评分
FROM sh_goods AS g
INNER JOIN sh_goods_comment AS c
ON g.id = c.goods_id
WHERE c.score = 5;
```
**步骤解析:**
- `INNER JOIN` 通过商品ID建立表关联(`g.id = c.goods_id`)[^1]
- `WHERE` 条件筛选评分等于5星的记录
- 使用别名`g`和`c`简化表名引用
- 通过`AS`关键字设置结果列别名
2. **使用WHERE子句实现隐式连接**
```sql
SELECT g.id, g.name, c.content, c.create_time
FROM sh_goods g, sh_goods_comment c
WHERE g.id = c.goods_id
AND c.score = 5;
```
**注意要点:**
- 确保两表存在有效的外键关联(商品ID对应关系)
- 评分字段可能需要根据实际数据类型调整条件表达式
- 若需要去重可添加`DISTINCT`关键字
阅读全文
相关推荐

















