0

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

假设我有两个按如下方式组织的表:

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

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

我还需要类似地合并另外两个表:

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

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

4

1 回答 1

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
);
于 2013-08-31T02:31:20.550 回答