【发布时间】:2018-08-28 15:30:37
【问题描述】:
我有两张桌子。一个是父数据表,另一个是映射表,用于实现该父数据表与主表之间的多对多关系。我的问题是父表和映射表具有需要合并的重复值。我似乎可以从父表中删除重复项,但映射表需要以相同的方式合并重复数据。映射表上有一个 FK 和相关的级联删除/更新。如何确保来自以下语句的合并也反映在映射表中?
之前
父表_A:
| ID | ProductName | MFG_ID |
|------+-------------+------------+
| 1 | ACME_123 | 123 |
| 2 | ACME_123 | 456 |
映射表
| ID | MainRecordID | ParentTable.MFG_ID|
|------+--------------+-----------------------+
| 1 | 1 | 123 |
| 2 | 2 | 456 |
希望之后
父表_A:
| ID | ProductName | MFG_ID|
|------+-------------+------------+
| 1 | ACME_123 | 123 |
映射表
| ID | MainRecordID | ParentTable.MFG_ID|
|------+--------------+-----------------------+
| 1 | 1 | 123 |
| 2 | 2 | 123 |
用于合并 Table_A 重复项的建议代码
MERGE Table_A
USING
(
SELECT
MIN(ID) ID,
ProductName,
MIN(MFG_ID) MFG_ID,
FROM Table_A
GROUP BY ProductName
) NewData ON Table_A.ID = NewData.ID
WHEN MATCHED THEN
UPDATE SET
Table_A.ProductName = NewData.ProductName
WHEN NOT MATCHED BY SOURCE THEN DELETE;
【问题讨论】:
标签: sql-server tsql merge duplicates