2013-08-31 114 views
0

因此,如果可能的話,我需要一些幫助。複雜表合併

說我有安排兩個表如下:

map | authid | name | time | date | ... (other fields) 

我試圖合併兩成一個。如果authid和map值相同,我希望替換一行。當需要合併行時,應該從時間值最低的表中檢索所有其他字段中的值(並且舊字段值因爲被替換而不需要保留) 。應該追加其他表中有其他映射或授權值的其他行。

我也需要合併其他兩個表有些類似:

pid | type | distance | ... (other fields) 

行需要更換敵我識別PID值和類型值是相同的。應保留的表格值是距離值最大的那些值。如果pid或type值不同,則應該從另一個表中追加新行。

+2

不錯的工作解釋您的要求。所有缺少的是試圖編寫SQL來實現它們。你迄今爲止嘗試過哪些方法不適合你? –

+0

請顯示你已經試過 – anon

+0

如果我知道從哪裏開始,我會發布。我只是沒有看到這些複雜的東西可能純粹是通過SQL(即沒有PHP的幫助)。我想我只會從我的人口稀少的數據庫中取消數據,並在我的所有服務器中共享最大的數據庫。 – tenub

回答

1

這相當迅速地扔在一起,將需要繼續工作,根本沒有經過測試,用其餘列名替換...,將CREATE TABLE行更改爲包括類型。根據數據庫的設置,可能還需要更明確的列引用。

CREATE TABLE t12 (map, authid, name, time, date, ...); 

INSERT VALUES INTO t12 (
    SELECT map, authid, name, time, date, ... 
    FROM (
     SELECT map, authid, name, time, date, ... 
     FROM (
      SELECT map, authid, name, time, date, ... FROM t1 
      UNION 
      SELECT map, authid, name, time, date, ... FROM t2 
     ) AS tc 
     ORDER BY time DESC 
    ) AS ts 
    GROUP BY map, authid 
); 

CREATE TABLE t34 (pid, type, distance, ...); 

INSERT VALUES INTO t34 (
    SELECT pid, type, distance, ... 
    FROM (
     SELECT pid, type, distance, ... 
     FROM (
      SELECT pid, type, distance, ... FROM t3 
      UNION 
      SELECT pid, type, distance, ... FROM t4 
     ) AS tc 
     ORDER BY time DESC 
    ) AS ts 
    GROUP BY pid, type 
);