【发布时间】:2020-10-25 16:56:59
【问题描述】:
我有一个生成 3 列的查询(ApplicationID、FamilySize、GrantID)。在初始查询中,FamilySize 是一个计数。该查询有效,大约需要 5 分钟才能产生结果,并产生预期的结果。查询是这样的:
SELECT t1.ApplicationID, COUNT(*) FamilySize, t1.GrantID
FROM
(
SELECT g.ApplicationID, ChildApplicationID `RefID`, g.GrantID
FROM CONTINUITYCHILD_P `child`
JOIN uspto.GRANT as g ON child.ApplicationID = g.ApplicationID
UNION
SELECT g2.ApplicationID, ParentApplicationID `RefID`, g2.GrantID
FROM CONTINUITYPARENT_P `par`
JOIN uspto.GRANT as g2 ON par.ApplicationID = g2.ApplicationID
) t1
GROUP BY ApplicationID
初始查询运行良好。但是,我想用它来更新另一个表中的字段,其中GrantID 匹配。我正在使用 MariaDB,但查看了 MySQL 8 文档,因为 MariaDB 和 MySQL 应该具有兼容的语法:https://dev.mysql.com/doc/refman/8.0/en/update.html
我正在尝试使用与此类似的语法:
UPDATE t1, t2
SET t1.column = t2.column
WHERE t1.column2 = t2.column2
这样会将我的整个初始查询转换为表 (t2),并且正在更新的表 (t1) 将能够匹配 t1 和 t2 之间的列。
这是结果查询:
UPDATE METRICS_G m,
(
SELECT ApplicationID, COUNT(*) FamilySize, GrantID
FROM
(
SELECT g.ApplicationID, ChildApplicationID `RefID`, g.GrantID
FROM CONTINUITYCHILD_P `child`
JOIN uspto.GRANT as g ON child.ApplicationID = g.ApplicationID
UNION
SELECT g2.ApplicationID, ParentApplicationID `RefID`, g2.GrantID
FROM CONTINUITYPARENT_P `par`
JOIN uspto.GRANT as g2 ON par.ApplicationID = g2.ApplicationID
) t1
GROUP BY ApplicationID
) t2
SET m.FamilySize = t2.FamilySize
WHERE m.GrantID = t2.GrantID;
查询没有出错,并在 3 毫秒内返回,影响 0 行。
这一定意味着子查询没有被执行,因为该查询通常需要几分钟才能返回。
在 UPDATE 语句中使用查询的输出作为表来匹配我做错了什么?
【问题讨论】:
-
选择加入 METRICS_G 的位置,然后首先选择并查看它是否找到任何行。您可以使用此结果选择来组合列。但是 forst ypoui 必须查看是否有任何连接的行 ar all
-
BOoom...你解决了。 METRICS_G 是一个空表。我正在使用测试表,但它是空的。谢谢!
标签: mysql sql sql-update subquery