我正在尝试从我的表中删除重复的行,例如,如果我的客户表包含以下内容:
first_name last_name email
fred wilford wilford@xchange.co.uk
fred wilford wilford@xchange.co.uk
Damian Jones jones@xchange.co.uk
理想的结果应该是这样的:
first_name last_name email
fred wilford wilford@xchange.co.uk
Damian Jones jones@xchange.co.uk
在删除主表中的重复行之前,对于创建的包含重复行的中间表来说,这应该是相当简单的,最后将中间表中的所有行插入回主表。但是我更愿意删除中间表并只使用类似 with 语句的东西。 考虑以下示例:
with dups as
(
select name,last_name,email from customer group by 1,2,3 having
count(*) > 1
)
delete from customer
using
(
select name,last_name,email from customer group by 1,2,3 having
count(*) > 1
)b
where b.name = customer.name;
insert into customer
(
select name,last_name,email from dups
)
问题是最后的插入语句失败了,因为“dups”没有被识别。有没有办法来解决这个问题?提前致谢
最佳答案
您可以 chain the CTE如果你想:
WITH dups AS
(
select name,last_name,email from customer group by 1,2,3 having
count(*) > 1
),
del AS(
DELETE FROM customer USING dups WHERE dups.name = customer.name RETURNING dups.*
),
ins AS(
INSERT INTO customer(name,last_name,email) SELECT name,last_name,email FROM del RETURNING del.*
)
SELECT * FROM ins;
关于sql - 在多个查询上使用 "with"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29499508/