2010-02-27 44 views
0

我有兩個不同的表,我決定將它們合併到一個表...通過爲沒有從合併表派生值的列插入空值來合併表?

出生表有

ID,姓名,國家,birthday_date, 描述,鏈接

死亡表有

ID,姓名,國家,death_date, 描述,鏈接

,我想將它們合併成一個單一的表結構

ID,姓名,國家,bdate,ddate, 描述,鏈接。

每個表的鏈接都有一個唯一的值,所以我必須使用鏈接合併表。我嘗試了很多查詢,但導致錯誤的結果。

無論是出生和死亡表可以有相同的名字和一些名字可能存在或者只出生或死亡表。

如果那麼,如何才能將它們合併,並更新空日期爲具有任何兩個舊錶的任何值的列?

回答

2

假設您的新idAUTO_INCREMENT此解決方案使用CROSS JOINCOALESCE應該爲你工作。 namecountrydescriptiondeath將被忽略,如果提供birth

INSERT INTO new_table (name, country, bdate, ddate, description, link) 
(
    SELECT 
    COALESCE(b.name, d.name), 
    COALESCE(b.country, d.country), 
    b.birthday_date, 
    d.death_date, 
    COALESCE(b.description, d.description), 
    COALESCE(b.link, d.link) 
    FROM birth b 
    CROSS JOIN death d ON (d.link = b.link) 
) 

另外,從birth插入的所有行:

INSERT INTO new_table (name, country, bdate, ddate, description, link) 
(
    SELECT name, country, birthday_date, NULL, description, link 
    FROM birth 
) 

然後用`death_date'如果有更新的那些行:

UPDATE new_table nt 
SET ddate = (SELECT death_date FROM death d WHERE d.link = nt.link) 

最後,添加所有行death,在birth中沒有輸入:

INSERT INTO new_table (name, country, bdate, ddate, description, link) 
(
    SELECT name, country, NULL, death_date, description, link 
    FROM death d 
    WHERE NOT EXISTS (SELECT NULL 
        FROM new_table 
        WHERE link = d.link 
        ) 
) 
+0

UPDATE NEW_TABLE新臺幣 SET ddate =(SELECT death_date從死亡d WHERE d.link = nt.link) 查詢工作不細.. 它返回以下錯誤 #1048 - 列「ddate '不能爲空 – Vijay 2010-04-04 10:43:33

+0

正如錯誤所說,你的ddate不能爲空。這意味着你只能處理已經死亡的記錄...... – 2010-04-06 06:42:49