ORACLE SQL - 删除任何带有count>的记录1

时间:2015-02-25 15:23:00

标签: sql oracle sql-delete

我正在将客户收集到具有特定产品的临时表中,因为此示例将被称为“Foobar”。

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

有些客户可能有多个Foobar,因此表格中的CUSTOMER_ID数量大于1

我的问题是,如何删除表格中包含多条记录的所有客户?

我试过这个

DELETE FROM TEMP_CUSTOMERS
WHERE COUNT(CUSTOMER_ID) > 1

这不起作用。

1 个答案:

答案 0 :(得分:2)

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

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的客户。但这相当偏离主题。