接下来是一个先前的问题,我正在整理一个包含电话号码的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 |电话号码的顺序并不重要,只要号码在第一列中,任何NULLS都是“正确的”。
SQLFiddle在这里--有人能建议如何有效地删除每行重复的值吗?
发布于 2013-04-03 12:14:59
你可以尝试直截了当的方法,特别是如果这是一次性的事情,或者偶尔做你的清理。
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,你应该这样做。
https://stackoverflow.com/questions/15786699
复制相似问题