从两个不相关的表更新查询

时间:2013-02-07 13:15:47

标签: mysql

我需要更新表格中的列。应从另一个表中检索更新值。我提出的查询是声明:

update db1.t1 set location=(select countryName from db1.t1, db2.t2 where t1.num 
between t2.beginNum AND t2.endNum limit 1)

我收到以下错误:

Error Code: 1093 You can't specify target table t1 for update in FROM clause.

然后,当我从t1子句

中删除表名FROM
update db1.t1 set location=(select countryName from db2.t2 where num 
between t2.beginNum AND t2.endNum limit 1)

查询有效,但我不确定它是否正常工作。据我所知,如果我从多个表中检索,我必须在FROM子句中指定两个表。我工作的两个表没有任何共同列。但是,t1中的值可以在t2中的两个值之间找到。第二个查询绝对正确吗?查询如何知道num子句之后的where来自第一个表?我担心我的错误价值。

1 个答案:

答案 0 :(得分:0)

这两个查询做了不同的事情。

第一种是尝试为t1中的每个位置分配一个任意t2.CountryName。它永远不会分配NULL值,因为可能有一些符合条件的t1.num。当t1.num不符合between条件时。第一个查询中对db1.t1的两个引用是不同的引用,因此表之间有一个隐式cross join

第二个是将任意t2.CountryName分配给行上的num值满足条件的位置。对于其他行,将分配NULL。

我的猜测是第二个查询真的是你想要做的。

相关问题