2

较早的问题之后,我正在尝试整理一个包含电话号码的 SQL 表。我需要删除每行重复的数字- 而不是整个表格。例如,我的表如下所示:

 | CustomerID | Tel1     | Tel2      | Tel3     | Tel4      | Tel5      | Tel6     |
 | Cust001    | 01222222 | 012333333 | 07111111 | 07222222  | 01222222  | NULL     |
 | Cust002    | 07444444 | 07555555  | 015333333| 07555555  | NULL      | NULL     |
 | Cust003    | 01222222 | 017777777 | 07888888 | 017777777 | 016666666 | 01222222 |

我想删除在同一行中出现两次或多次的任何数字......所以表格最终看起来像:

 | CustomerID | Tel1     | Tel2      | Tel3     | Tel4     | Tel5      | Tel6   |
 | Cust001    | 01222222 | 012333333 | 07111111 | 07222222 | NULL      | NULL   |
 | Cust002    | 07444444 | 015333333 | 07555555 | NULL     | NULL      | NULL   |
 | Cust003    | 01222222 | 017777777 | 07888888 | 016666666| 013333    | NULL   |

电话号码的顺序并不重要,只要数字在第一列并且任何 NULL 都在“右边”。

SQLFiddle在这里 - 任何人都可以建议如何有效地删除每行的重复值吗?

4

1 回答 1

3

您可以尝试直截了当的方法,特别是如果这是一次性的事情或者您偶尔会进行清理。

UPDATE phonenumbers SET tel6 = NULL
 WHERE tel6 IN(tel5,tel4, tel3, tel2, tel1);
UPDATE phonenumbers SET tel5 = NULL
 WHERE tel5 IN(tel4, tel3, tel2, tel1);
UPDATE phonenumbers SET tel4 = NULL
 WHERE tel4 IN(tel3, tel2, tel1);
UPDATE phonenumbers SET tel3 = NULL
 WHERE tel3 IN(tel2, tel1);
UPDATE phonenumbers SET tel2 = NULL
 WHERE tel2 = tel1;

SQLFiddle

不过,我完全同意@Mahmoud Gamal 和@steoleary 的观点,即如果您可以更改表格的 DDL,您应该这样做。

于 2013-04-03T12:14:59.037 回答