如何在Azure Synapse Analytics中删除指定条件的重复行?
在Azure Synapse Analytics SQL Pool中删除指定重复行
针对你需要删除audit_date = '2022-08-10'且city = 'LA'的重复行、仅保留一行的需求,由于Synapse SQL Pool不支持带CTE的DELETE语句,你可以采用以下两种可靠方法:
方法一:临时表迁移法(推荐,适用于任意数量重复行)
这种方法通过临时表筛选出需要保留的所有数据,再替换原表内容,安全且易维护:
-- 1. 创建临时表,筛选并存储需保留的数据 SELECT audit_date, city, number_of_toys, number_of_balloons, number_of_drinks INTO #temp_retained_data FROM ( SELECT *, -- 按audit_date和city分组,给每组记录编号 ROW_NUMBER() OVER (PARTITION BY audit_date, city ORDER BY (SELECT NULL)) AS row_num FROM your_table_name ) filtered_data -- 保留每组的第一条记录,或非目标重复组的所有记录 WHERE row_num = 1 OR NOT (audit_date = '2022-08-10' AND city = 'LA'); -- 2. 清空原表(确保原表无其他需保留的关联数据,若有需谨慎操作) TRUNCATE TABLE your_table_name; -- 3. 将临时表数据插回原表 INSERT INTO your_table_name (audit_date, city, number_of_toys, number_of_balloons, number_of_drinks) SELECT audit_date, city, number_of_toys, number_of_balloons, number_of_drinks FROM #temp_retained_data; -- 4. 清理临时表 DROP TABLE #temp_retained_data;
说明:
ORDER BY (SELECT NULL)表示随机选择保留哪一行,若需指定保留特定行(比如number_of_balloons最小的),可替换为ORDER BY number_of_balloons ASC。- 若原表有外键约束,需先禁用约束再执行TRUNCATE,操作后重新启用。
方法二:直接DELETE(仅适用于删除单条重复行)
如果仅需删除一条重复的LA记录,可直接使用TOP结合存在性判断:
DELETE TOP (1) FROM your_table_name WHERE audit_date = '2022-08-10' AND city = 'LA' -- 确保该组确实存在重复行再删除 AND EXISTS ( SELECT 1 FROM your_table_name t WHERE t.audit_date = '2022-08-10' AND t.city = 'LA' HAVING COUNT(*) > 1 );
说明:
- 此方法仅删除一条重复记录,若存在多条重复(超过2条),需多次执行或调整TOP数量。
内容的提问来源于stack exchange,提问作者BenTuran
相关产品推荐
相关产品推荐

