2016-07-30 83 views
1

更新我有兩個表:默認用戶具有相同的列,除了在默認user_id說明在「用戶」這不是唯一的一段時間。插入或選擇和覆蓋零點

我想借此所有行從用戶,並將其插入到默認,如果用戶兩行得到了相同的USER_ID,我想在這樣的方式來合併它們,所有的空/空值將具有非空/空值

這裏被重寫是一個例子

users 
----- 
user_id|name|email|address 
-------------------------- 
1  |abc |null |J St 
1  |coco|[email protected]|null 

插入到默認值後,我期望下一結果:

defaults 
----- 
user_id|name|email|address 
-------------------------- 
1  |abc |[email protected]|J St 

@Eric乙提供瞭如何用插入值執行此操作的answer

假設在表.. ID,NAME 3列,ROLE
這將更新2的 列。當ID = 1時,ROLE將不受影響。當ID = 1 不存在時,該角色將設置爲'Benchwarmer'而不是 默認值。

INSERT OR REPLACE INTO Employee (id, name, role) 
    VALUES ( 1, 
      'Susan Bar', 
      COALESCE((SELECT role FROM Employee WHERE id = 1), 'Benchwarmer') 
     ); 

當我使用select我插入

insert or replace into defaults select ??? from users 
+0

如果存在多個非NULL值,應選擇哪一個? –

+0

@CL。它並不適合我 –

回答

1
INSERT OR REPLACE INT DEFAULTS VALUES (ID, Name, Role) 
    (
    SELECT ID, MAX(Name), MAX(Role) FROM Users GROUP BY ID 
); 

馬克斯將選擇的最大值,而不是空,如果有一個如何做到這一點。