说我具有以下表结构:
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
答案 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
列并不明显。