1

同じデータベース内の 4 つのテーブルからデータを取得するクエリ (MySQL) があります。私がしたいのは、クエリを実行し、変更があった場合に結果を更新し、新しいレコードを別のデータベースの別のテーブルに挿入することです。

SELECT a.Created,
a.id 'TicketID',
GROUP_CONCAT((CASE WHEN d.CustomField = 1 THEN d.Content ELSE NULL END)) `CompanyName`,
a.Subject,
c.Name Queue,
b.Name 'Owner',
a.`Status`,
a.LastUpdated,
GROUP_CONCAT((CASE WHEN d.CustomField = 4 THEN d.Content ELSE NULL END)) `Location`,
a.TimeWorked 'TimeWorked',
GROUP_CONCAT((CASE WHEN d.CustomField = 2 THEN d.Content ELSE NULL END)) `OverRide`,
a.Resolved
FROM    rt.Tickets a
    INNER JOIN rt.Users b
        ON a.owner = b.id
    INNER JOIN rt.Queues c
        ON a.queue = c.id
    INNER JOIN  rt.ObjectCustomFieldValues d
        ON a.id = d.ObjectID
GROUP BY a.id

上記のクエリは、チケット システムからデータを取得します。

以下を使用して、最初にデータを挿入できました。

INSERT INTO Support (Created, TicketID, CompanyName, Subject, Queue, Owner, Status, LastUpdated, Location, Timeworked, OverRide, Resolved)
SELECT a.Created,
a.id 'TicketID',
GROUP_CONCAT((CASE WHEN d.CustomField = 1 THEN d.Content ELSE NULL END)) `CompanyName`,
a.Subject,
c.Name Queue,
b.Name 'Owner',
a.`Status`,
a.LastUpdated,
GROUP_CONCAT((CASE WHEN d.CustomField = 4 THEN d.Content ELSE NULL END)) `Location`,
a.TimeWorked 'TimeWorked',
GROUP_CONCAT((CASE WHEN d.CustomField = 2 THEN d.Content ELSE NULL END)) `OverRide`,
a.Resolved
FROM    rt.Tickets a
    INNER JOIN rt.Users b
        ON a.owner = b.id
    INNER JOIN rt.Queues c
        ON a.queue = c.id
    INNER JOIN  rt.ObjectCustomFieldValues d
        ON a.id = d.ObjectID
GROUP BY a.id

ただし、既に存在するデータを更新しようとしたり、新しいデータを追加しようとすると、エラーが発生します。

UPDATE Support
SELECT a.Created,
a.id 'TicketID',
GROUP_CONCAT((CASE WHEN d.CustomField = 1 THEN d.Content ELSE NULL END)) `CompanyName`,
a.Subject,
c.Name Queue,
b.Name 'Owner',
a.`Status`,
a.LastUpdated,
GROUP_CONCAT((CASE WHEN d.CustomField = 4 THEN d.Content ELSE NULL END)) `Location`,
a.TimeWorked 'TimeWorked',
GROUP_CONCAT((CASE WHEN d.CustomField = 2 THEN d.Content ELSE NULL END)) `OverRide`,
a.Resolved
FROM    rt.Tickets a
    INNER JOIN rt.Users b
        ON a.owner = b.id
    INNER JOIN rt.Queues c
        ON a.queue = c.id
    INNER JOIN  rt.ObjectCustomFieldValues d
        ON a.id = d.ObjectID
GROUP BY a.id

ありがとう、

4

2 に答える 2

0

使用しているユーザーが両方で適切な権限を持っている場合、次のように行うことができます。

INSERT INTO destination_database.table_name
(SELECT source_database.source_table.field_name
FROM source_database.source_table);

あなたの場合、宛先テーブルには、同等のデータ型を持つ11個のフィールドを選択する必要があります。

于 2012-09-18T03:55:41.233 に答える
0

「派生テーブル」を自分で手動で管理するのではなく、ビューを定義することが可能です。そうすれば、データベースはソース テーブルの変更をそのまま反映できます。

参照: http://www.w3schools.com/sql/sql_view.asp

于 2012-09-19T04:31:51.470 に答える