2016-11-29 36 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 

如果它是空字符串,則將其替換爲WHERE email_address = "",而不是NULL。請致電alternate_email_address。出於性能原因,如果可能的話,使用limit 1而不是聚合函數。