如何通过子表中的多条记录计算重复项

zpqajqem  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(292)

假设我有以下表格结构:

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
h9vpoimq

h9vpoimq1#

使用连接是生成相关信息的最简单方法。我已经 GROUP BY product.id,意思是 eans 是聚合字段,因为这些字段是唯一可以复制的字段。我加了一句 HAVING 查询后的部分,以仅选择具有2个或更多个结果(可选)。

SELECT p.id, name, price, count(ean) as eans
FROM products p
JOIN products_ean e
  ON p.id = e.product_id
GROUP BY p.id
HAVING eans >= 2

在查询效率方面,将产品标识ean作为 products_ean table可能是最有效的。既然这是独一无二的,为什么 products_ean.id 需要列。

相关问题