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