0

したがって、私は完全なSQLバカなので、可能であれば何らかの助けが必要です。

次のように編成された 2 つのテーブルがあるとします。

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

2つを1つに統合しようとしています。authid と map の値が同じ場合、行を置き換えたいと思います。行をマージする必要がある場合、他のすべてのフィールドの値は、時間値が最も小さいテーブルから取得する必要があります (古いフィールド値は置き換えられるため、もちろん保持する必要はありません)。 . 別のマップまたは authid 値がある他のテーブルの他のすべての行を追加する必要があります。

他の 2 つのテーブルも同様にマージする必要があります。

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 に答える