MySQL关联查询报Subquery returns more than 1 row错误求助
错误原因说明
- 第一次报
#1242 - Subquery returns more than 1 row:SELECT后的标量子查询要求单次只能返回1行1列的结果,你写的子查询没有关联外层的产品ID,单独执行会返回所有product_id对应的品牌拼接结果(多行),因此触发报错。 - 第二次报
#1054 - Unknown column 'products_brands.product_id' in 'on clause':你在子查询中只查询了拼接后的品牌字段,没有把关联需要的product_id字段查询出来,外层JOIN时找不到对应字段触发报错。 - 另外你两次编写的SQL都存在字段名和提供的表结构不匹配的问题:products表的产品字段名为
Products而非Product_Name,products_brands表的品牌字段名为Brands而非brand_name,字段名写错也会导致执行报错。
正确实现SQL
推荐写法:先关联表再分组拼接,逻辑清晰性能更优
SELECT p.Products, GROUP_CONCAT(pb.Brands SEPARATOR ',') AS Brands FROM products p LEFT JOIN products_brands pb ON p.Serialnum = pb.product_id GROUP BY p.Serialnum, p.Products
如果你不需要保留没有对应品牌的产品,把LEFT JOIN替换为INNER JOIN即可;如果需要拼接的品牌去重,可以修改为GROUP_CONCAT(DISTINCT pb.Brands SEPARATOR ',')。
也可以用关联子查询实现,和你最初的写法逻辑接近:
SELECT p.Serialnum, p.Products, ( SELECT GROUP_CONCAT(pb.Brands) FROM products_brands pb WHERE pb.product_id = p.Serialnum ) AS Brands FROM products p
内容的提问来源于stack exchange,提问作者Osama Zubair
相关产品推荐
相关产品推荐

