Mysql 查询多个表并在另一个数据库表中更新结果

Mysql 查询多个表并在另一个数据库表中更新结果,mysql,sql,database,Mysql,Sql,Database,我有一个查询(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`,

我有一个查询(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个您正在选择的字段,具有可比较的数据类型。

可以定义一个视图,而不是自己手动管理“派生表”。然后,数据库就可以在源表中进行更改时反映这些更改


请参阅:

您是否尝试过存储过程或触发器?正如我在文章中所说,我最初能够使用INSERT INTO来填充表中的数据。我现在需要做的是更新表。如果我运行INSERT,它只会复制数据。