复杂的表合并

时间:2013-08-31 00:19:42

标签: mysql

因此,作为完整的SQL白痴,我需要一些帮助,如果可能的话。

假设我有两个表组织如下:

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

我正在尝试将两者合并为一个。如果authid和map值相同,我希望替换一行。当需要合并一行时,应该从时间值最低的表中检索所有其他字段中的值(并且当然不需要保留旧的字段值,因为它们是'被替换)。应该追加另一个表中存在不同映射或authid值的所有其他行。

我还需要合并其他两个表:

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

如果pid值和类型值相同,则需要替换行。应保留的表值是距离值最大的值。如果pid或类型值不同,则应从另一个表中追加新行。

1 个答案:

答案 0 :(得分: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
);