因此,作为完整的SQL白痴,我需要一些帮助,如果可能的话。
假设我有两个表组织如下:
map | authid | name | time | date | ... (other fields)
我正在尝试将两者合并为一个。如果authid和map值相同,我希望替换一行。当需要合并一行时,应该从时间值最低的表中检索所有其他字段中的值(并且当然不需要保留旧的字段值,因为它们是'被替换)。应该追加另一个表中存在不同映射或authid值的所有其他行。
我还需要合并其他两个表:
pid | type | distance | ... (other fields)
如果pid值和类型值相同,则需要替换行。应保留的表值是距离值最大的值。如果pid或类型值不同,则应从另一个表中追加新行。
答案 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
);