繁体   English   中英

INNER JOIN 中的 SELECT 和 Count

[英]SELECT and Count in INNER JOIN

我尝试显示每个产品的图像数量。 但这里是请求返回所有产品的图像数量。

SELECT images, pl.*, l.iso_code, ps.price, cl.name as category_name
FROM `ps_product_lang` pl
INNER JOIN `ps_product` p ON (p.`id_product` = pl.`id_product`)
INNER JOIN `ps_lang` l ON (pl.`id_lang` = l.`id_lang`)
INNER JOIN `ps_product_shop` ps ON (ps.`id_product` = p.`id_product`)
INNER JOIN `ps_category_lang` cl ON (cl.`id_category` = p.`id_category_default`) and (cl.`id_lang` = pl.`id_lang`)
 
INNER JOIN (SELECT id_image, id_product, COUNT(id_image) AS images
FROM `ps_image`) i ON (i.`id_product` = p.id_product)
 
WHERE p.active = 1 AND cl.id_shop = 1
ORDER BY pl.name ASC
LIMIT 10 OFFSET 0

在这一行。

INNER JOIN (SELECT id_image, id_product, COUNT(id_image) AS images
FROM `ps_image`) i ON (i.`id_product` = p.id_product)

代码 sql https://www.sexy-charmes.fr/sql.sql

此查询格式错误:

(SELECT id_image, id_product, COUNT(id_image) AS images
 FROM ps_image
) 

这是错误的SQL,应该因语法错误而被拒绝。 令人高兴的是,MySQL 现在使用默认设置做到了这一点。

问题是什么? 由于COUNT()您有一个聚合查询。 没有GROUP BY ,因此查询只返回一行。 但这些行也有“裸”列。 这是一个 SQL 语法错误,并且几乎在所有数据库中都是一个错误。

您真的只想按一列聚合。 那应该是唯一没有聚合函数的列选择,它应该在GROUP BY

(SELECT id_product, COUNT(id_image) AS images
 FROM ps_image
 GROUP BY id_product
) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM