如何解决带有子查询的MySQL UPDATE TABLE不会先执行子查询
我有一个查询,该查询产生3列(MATCH (c:Context{name:'lisaksa'})
SET c.name = left(c.name,size(c.name)-1) + 'o'+'_new'
,ApplicationID
,FamilySize
)。在初始查询中,GrantID
是一个计数。该查询有效,大约需要5分钟才能产生结果,并产生预期的结果。查询是这样的:
FamilySize
该初始查询工作正常。但是,我想用它来更新另一个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
匹配的表中的字段。我正在使用MariaDB,但查看了MySQL 8文档,因为MariaDB和MySQL应该具有兼容的语法:https://dev.mysql.com/doc/refman/8.0/en/update.html
我正在尝试使用与此类似的语法:
GrantID
这样可以将我的整个初始查询转换成一个表(t2),而要更新的表(t1)可以在t1和t2之间的列上匹配。
这是结果查询:
UPDATE t1,t2
SET t1.column = t2.column
WHERE t1.column2 = t2.column2
查询没有错误,并在3毫秒内返回,影响了0行。
这必须表示子查询未在执行,因为返回该查询通常需要几分钟。
使用查询的输出作为表与UPDATE语句匹配时,我做错了什么?
解决方法
您必须将查询连接到METRICS_G
语句中的表UPDATE
:
UPDATE METRICS_G m
INNER JOIN (
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 ON m.GrantID = t2.GrantID
SET m.FamilySize = t2.FamilySize
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。