ORACLE SQL - 删除所有计数 > 1 的记录

ORACLE SQL - Delete any records with count > 1

我正在收集具有特定产品的临时 table 客户,因为此示例将称为 "Foobar"。

CREATE TABLE  TEMP_CUSTOMERS AS
SELECT ROW_ID, CUSTOMER_ID
FROM PRODUCT prod
WHERE prod.NAME = 'Foobar'

一些客户可能有多个 Foobars,因此对于给定的 CUSTOMER_ID

,table 中的计数会大于 1

我的问题是,如何删除在 table 中有多个记录的所有客户?

我试过了

DELETE FROM TEMP_CUSTOMERS
WHERE COUNT(CUSTOMER_ID) > 1

这没有用。

由于您想要删除这些客户的所有行,您可以使用子查询执行相关删除,以识别具有多个行的客户:

DELETE FROM TEMP_CUSTOMERS
WHERE CUSTOMER_ID IN (
  SELECT CUSTOMER_ID
  FROM TEMP_CUSTOMERS
  GROUP BY CUSTOMER_ID
  HAVING COUNT(*) > 1
);

SQL Fiddle demo.

首先不插入这些重复项可能会更简单、更有效。作为 CTAS 的一部分,您可以在在线视图中进行分析计数;并丢弃该计数大于 1 的任何客户。但这有点离题了。