假设我有以下表格结构:
products
id | name | price
products_ean
id | product_id | ean
一个产品可能(很不幸)有多个ean编号。两个产品可以有一个或多个相同的ean编号。
通过比较products\ ean表格中的多个ean编号来计算重复产品数量的最佳做法是什么?
我尝试了以下方法,但这会使查询速度变慢:
SELECT
`products`.`name`,
(
SELECT
COUNT(*)
FROM
`products_ean`
WHERE
`ean` IN(
SELECT
`ean`
FROM
`products_ean`
WHERE
`product_id` = `products`.`id`
) AND `products_ean`.`product_id` != `products`.`id`
GROUP BY `product_id`
) AS `ProductEANCount`
FROM
`products`
LIMIT 12
1条答案
按热度按时间h9vpoimq1#
使用连接是生成相关信息的最简单方法。我已经
GROUP BY
product.id,意思是eans
是聚合字段,因为这些字段是唯一可以复制的字段。我加了一句HAVING
查询后的部分,以仅选择具有2个或更多个结果(可选)。在查询效率方面,将产品标识ean作为
products_ean
table可能是最有效的。既然这是独一无二的,为什么products_ean.id
需要列。