使用LIKE语句连接两张表的SQL查询问题咨询
解决使用LIKE关联两张表的计数查询问题
嘿,我看你是想通过comment_location字段里包含产品ID的关联逻辑,统计每个对应位置的评论数量对吧?你的当前查询有几个小问题,我帮你调整一下:
首先说下原查询的问题:
- 你用的
(select '%'+produit.id+'%')写法不对,在MySQL里字符串拼接得用CONCAT函数,而且完全没必要套子查询,直接在JOIN的关联条件里处理就好 - 另外你的GROUP BY只写了
comment_location,但SELECT里还包含produit.nom,这在开启严格SQL模式的数据库里会报错,逻辑上也可能出现分组混乱的情况
给你修正后的查询语句:
SELECT COUNT(c.comment_id) AS nb, p.nom FROM comments c INNER JOIN produit p ON c.comment_location LIKE CONCAT('%', p.id, '%') GROUP BY p.nom, c.comment_location;
简单解释下:
- 给表加了
c(comments)和p(produit)的别名,让语句更清爽 - 用
CONCAT('%', p.id, '%')正确生成模糊匹配的字符串,完美适配MySQL的语法(要是你用的是SQL Server,换成'%' + p.id + '%'就行) - GROUP BY同时包含了
p.nom和c.comment_location,既符合SQL规范,也保证分组逻辑的准确性
另外提个小建议:如果comment_location里存的是多个产品ID用分隔符(比如逗号)凑在一起的内容,这种设计其实不太合理。最好是建一个中间关联表(比如叫comments_produit),专门存评论和产品的多对多关系,这样查询效率会高很多,还能避免模糊匹配带来的误判(比如ID是12和123会被同时匹配到的情况)
内容的提问来源于stack exchange,提问作者New_ToQT
相关产品推荐
相关产品推荐

