如何删除y表中关联z表数据完全重复的重复行
批量删除关联子表数据完全一致的重复Y表行
表结构说明
- x表:
column1,..., x_id(主键为x_id) - y表:
column1, column2, column3,..., x_id, y_id(主键为y_id,外键x_id关联x表) - z表:
column1, column2, column3,..., x_id, y_id, z_id(主键为z_id,外键y_id关联y表)
需求目标
删除y表中同时满足以下两个条件的重复行:
- 多行的核心业务字段(
column1, column2, column3,..., x_id,即除y_id外的所有字段)完全重复; - 这些重复行在z表中关联的所有数据完全一致(包括行数、每行的所有字段值)。
示例说明
Y表示例数据
| column 1 | column 2 | x_id | y_id |
|---|---|---|---|
| foo | bar | 1 | 1 |
| foo | bar | 1 | 2 |
| xx | yy | 2 | 3 |
| zz | kk | 2 | 4 |
| tt | mm | 2 | 5 |
| baz | qux | 3 | 6 |
| baz | qux | 3 | 7 |
这里存在两组重复行:y_id=1和2、y_id=6和7,它们的column1, column2, x_id完全相同。
Z表示例数据
| column 1 | column 2 | column 3 | x_id | y_id | z_id |
|---|---|---|---|---|---|
| foo | bar | qux | 1 | 1 | 1 |
| foo2 | bar2 | qux2 | 1 | 1 | 2 |
| foo | bar | qux | 1 | 2 | 3 |
| foo2 | bar2 | qux2 | 1 | 2 | 4 |
| baz | foo | qux | 3 | 6 | 5 |
| baz2 | foo2 | qux1 | 3 | 6 | 6 |
| baz3 | foo3 | qux2 | 3 | 6 | 7 |
| baz | foo | qux | 3 | 7 | 8 |
| baz2 | foo2 | qux1 | 3 | 7 | 9 |
y_id=1和2关联的z表数据完全一致(行数相同、每行字段值匹配),因此需删除其中一行(如y_id=1或y_id=2);y_id=6和7关联的z表数据不一致(6关联3行,7关联2行),因此保留这两行。
实现要求
由于表数据量极大,需要高效解决方案,优先采用GROUP BY ID的方式处理,避免使用表连接。
内容的提问来源于stack exchange,提问作者DRA
相关产品推荐
相关产品推荐

