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 |

同じ行に 2 回以上表示される数字を削除したいので、表は次のようになります。

 | 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

特にそれが 1 回限りのことである場合や、ときどきクリーンアップを行う場合は、率直なアプローチを試すことができます。

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;

SQLフィドル

それにもかかわらず、@Mahmoud Gamalと@steolearyに完全に同意します。テーブルのDDLを変更できる場合は、それを行う必要があります。

于 2013-04-03T12:14:59.037 に答える