如何在MySQL子表中按多个记录计算重复项

时间:2018-11-14 09:10:22

标签: mysql mysqli

说我具有以下表结构:

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 个答案:

答案 0 :(得分:2)

使用联接是生成相关信息的最简单方法。我有WKInterfaceMap个product.id,这意味着GROUP BY是聚合字段,因为那些是唯一可以重复的字段。我在查询后添加了eans部分,以仅选择2个或更多(可选)的结果。

HAVING

关于查询效率,将product_id,ean作为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 表的复合主键可能是最有效的。由于这是唯一的,因此为什么需要products_ean列并不明显。