0

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

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我害怕我得到错误的价值观。

4

1 回答 1

0

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

第一个是尝试为t2.CountryNamet1 中的每个位置分配一个任意值。它永远不会分配 NULL 值,因为可能有一些t1.num满足条件。什么时候t1.num不满足between条件。第一个查询中的两个引用是不同的引用,因此您在表之间db1.t1有一个隐式。cross join

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

我的猜测是第二个查询确实是您想要做的。

于 2013-02-07T14:42:45.473 回答