我想使用内连接
从另一个表更新我的表查询:
UPDATE XYZ INNER JOIN ABC on ABC.Id = XYZ.Id
SET XYZ.Std = ABC.Std
示例数据:
表XYZ
ID STD
401471 QWERTY1 0 13.381 2013-01-01 00:00:00 2002-06-01 00:00:00 0 0 0 2002-06-01 00:00:00 2005-05-31 00:00:00
401472 QWERTY2 0 13.488 2013-01-04 00:00:00 2002-06-01 00:00:00 0 0 0 2002-06-01 00:00:00 2005-05-31 00:00:00
401473 QWERTY3 0 13.465 2013-01-07 00:00:00 2002-06-01 00:00:00 0 0 0 2002-06-01 00:00:00 2005-05-31 00:00:00
表ABC
ID STD Q W
QWERTY1 2002-06-01 00:00:00 2005-05-31 00:00:00 0 0 0
QWERTY2 2002-07-01 00:00:00 2005-06-30 00:00:00 0 0 0
QWERTY3 2002-08-01 00:00:00 2005-07-31 00:00:00 0 0 0
ID不是主键,我有超过1.5百万条带有重复ID的记录,因为日期不同而重复了。
所以我的查询无效,因为连接丢失错误2013,我尝试将超时从600更改为6000,但无法工作,因为我无法更改云中的数据库服务器的超时。
任何人都可以告诉我,如果查询是正确的,如果是,为什么连接会丢失?
如果查询正确,我可以在块中进行吗?
答案 0 :(得分:0)
试试这个 -
UPDATE XYZ
set XYZ.std = ABC.std
from XYZ inner join ABC on XYZ.id = ABC.id
答案 1 :(得分:0)
查询可能需要很长时间才能执行,这就是为什么你会超时。您可以通过在查询中设置范围来执行此操作:
UPDATE XYZ
INNER JOIN ABC on ABC.Id = XYZ.Id
SET XYZ.Std = ABC.Std
WHERE ABC.Id between 1 AND 50000;
您可以使用任何其他参数来创建块,上面的查询只是一个示例。
答案 2 :(得分:0)
你可以这样做:
UPDATE XYZ INNER JOIN ABC on ABC.Id = XYZ.Id
SET XYZ.Std = ABC.Std;
MySQL中的(as desicribed here)但它不是本机ANSI SQL
您是否在id列上设置了索引? 你不必把它作为主要的,但应该有一个索引。