Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何为联接指定特定列?_Mysql_Sql - Fatal编程技术网

Mysql 如何为联接指定特定列?

Mysql 如何为联接指定特定列?,mysql,sql,Mysql,Sql,我正在尝试使用来自不同表中列的数据更新表中的列。我的密码是: UPDATE extlinks INNER JOIN sp_board using (title) SET extlinks.board_id = sp_board.id 我的问题如下:两个表都非常大(数百万行),我想如果我只合并必要的列,就可以加快更新速度。如何指定联接只应包括上述代码中的列?这由RDBMS的实现方式来处理 简而言之,服务器只会根据需要“具体化”。这里没有问题,在SQL中说“在联接中只包含X列”是没有意义的——这些

我正在尝试使用来自不同表中列的数据更新表中的列。我的密码是:

UPDATE extlinks
INNER JOIN sp_board using (title)
SET extlinks.board_id = sp_board.id

我的问题如下:两个表都非常大(数百万行),我想如果我只合并必要的列,就可以加快更新速度。如何指定联接只应包括上述代码中的列?

这由RDBMS的实现方式来处理

简而言之,服务器只会根据需要“具体化”。这里没有问题,在SQL中说“在联接中只包含X列”是没有意义的——这些列可以被认为是不包含的,除非以后需要它们(常见的情况是SELECT将结果发送到客户端)。在这种情况下,实际上只需要
sp_board.id


然而,请注意Rocket Hazmat的评论——它围绕着记录(而不是列)的具体化——因为它提出了一个非常有趣的问题。我不知道答案是什么。

如果添加
WHERE extlinks.board\u id!=sp_board.id
?“那没用吗?”RocketHazmat说,这是个好问题。我没有答案:我根本不知道查询规划者会考虑这种情况,特别是在这两个列都被适当索引的情况下。@RocketHazmat,如果可以的话,我会投票一百万次这可能是更新3条记录和更新471890067之间的区别。始终仅更新那些将实际更改TH值的记录column@HLGEM我猜由此产生的问题是——查询计划器已经这样做了吗?若有,地点/时间?我可以从审计日志中看出,至少在SQL server中,如果您让它更新它没有更新的列;t检查值是否相同,它会更新列。我相信大多数数据库都是按照这个原则运作的。