2016-11-29 13 views
1

が欠落している場合、私はこのようなデータを持つテーブルいくつかのことがあります。SQL:同じテーブルからの代替値で更新テーブル値は

------------------------------------------------------- 
member id | Email_address | alternate_Email_Address 
------------------------------------------------------ 
001  | [email protected] | [email protected] 
001  |    | [email protected] 
001  |    | [email protected] 
002  | [email protected] | [email protected] 
002  |    | [email protected] 

私はすべての場所のための電子メールアドレスをコピーしますSQLを実行したいですすべてのalternate_Email_Addressは同じです。私はこのようなテーブルの何かをしたいSQLを実行した後

------------------------------------------------------- 
member id | Email_address | alternate_Email_Address 
------------------------------------------------------ 
001  | [email protected] | [email protected] 
001  | [email protected] | [email protected] 
001  | [email protected] | [email protected] 
002  | [email protected] | [email protected] 
002  | [email protected] | [email protected] 
+0

必要なタグを削除しました。また、両方を使用していないので、mysqlとsql-serverタグも削除しました。実際に使用しているデータベースのみのタグを追加してください。 –

+1

実際に使用しているデータベースに質問にタグを付けてください。また、最後の行はどのように「ss.gmail.com」を取得しますか? –

+0

アドレスが同じでない行をすべて削除すると言っていますか? –

答えて

2

私はあなたが望むものを理解していれば、その後、ANSI標準のSQLを使用する方法は次のとおりです。

update t 
    set email_address = (select max(t2.email_address) 
         from t t2 
         where t2.alternate_Email_Address = t.alternate_Email_Address and 
           t2.email_address is not null 
         ) 
    where email_address is null; 
+0

おかげさまで...期待通りに働いています。 – Sujoy

0
UPDATE <TABLE> 
SET email_address = 
     (SELECT email_address 
     FROM <TABLE> lu 
     WHERE lu.alternate_email_address = <TABLE>.alternate_email_address 
       AND (email_address IS NOT NULL AND length(lu.email_address) > 1) limit 1) 
WHERE email_address IS NULL 

NULLでない空の文字列の場合は、WHERE email_address = ""と置き換えてください。

インデックスがalternate_email_addressであることを確認してください。パフォーマンス上の理由から可能であれば、集計関数ではなくlimit 1を使用してください。

関連する問題