Mysql 识别购买超过1次的产品

Mysql 识别购买超过1次的产品,mysql,sql,Mysql,Sql,我需要确定购买超过1次的产品 ERD图如下所示: 我写了这个查询 SELECT DISTINCT good_name FROM Goods JOIN Payments on Payments.good = Goods.good_id WHERE good in (SELECT good FROM (SELECT good

我需要确定购买超过1次的产品

ERD图如下所示:

我写了这个查询

SELECT DISTINCT good_name 
           FROM Goods
           JOIN Payments 
             on Payments.good = Goods.good_id
          WHERE good in (SELECT good 
                           FROM (SELECT good
                                      , COUNT(good) as c 
                                   FROM Payments 
                                  GROUP 
                                     BY good) as a 
                          WHERE c > 1)

它可以工作,但这段代码很棒吗?

分组会更好:

SELECT good_name 
FROM Goods 
JOIN Payments on Payments.good = Goods.good_id 
GROUP BY Goods.good_id 
HAVING COUNT(Payments.good) > 1
也许你还需要一个付款索引。好的专栏


最好在表Goods中创建另一列,该列将保存成功付款计数,并在每次付款后更新该列。

选择g.good\u name作为good\u name,count*as purchase\u count from Goods g left join payments p on p.good=g.good\u id group by 1 have purchave\u count>1;欢迎来到SO。请看:只有_FULL_GROUP_BY将使您的查询无效。对于MySQL 5.7.5及更高版本,这是不正确的。