我有一个查询(MySQL),该查询从同一数据库中的4个表中提取数据。我想做的是运行查询,并在有更改的情况下更新结果,并将新记录插入到另一个数据库的单独表中。

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


谢谢,

最佳答案

假设您所使用的用户在这两个用户中都具有适当的权限,则可以通过以下方式进行操作:

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


在您的情况下,目标表必须具有要选择的11个字段,并且具有可比较的数据类型。

关于mysql - 查询多个表并在另一个数据库表中更新结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12469871/

10-16 07:39
查看更多