SQL:基于另一个的MIN批量更新表?可能很容易,但卡住了

Posted

技术标签:

【中文标题】SQL:基于另一个的MIN批量更新表?可能很容易,但卡住了【英文标题】:SQL: Batch update table based on MIN of another? Probably easy, but stuck 【发布时间】:2009-01-09 14:41:36 【问题描述】:

我认为这很容易,但我不知道该怎么做!

我想更新作者表,以便最早字段包含最早书籍的年份。 我需要以某种方式使用 MIN 但如何通过一个查询来更新它们?

BookTable(BookID、AuthorFK、年份)

01 34 1943 02 34 1933 03 99 1910 04 62 1990 05 99 1901

AuthorTable(AuthorID,最早)

34 1933 62 1990 99 1901

编辑:哈哈,非常感谢您的超级快速回答! STACKO 规则(开放的东西除外)

【问题讨论】:

【参考方案1】:

update AuthorTable set Earliest = (select min(Year) from BookTable where BookTable.AuthorFK = AuthorTable.AuthorID)

【讨论】:

虽然这确实有效,但在大型数据集上速度非常慢。在没有嵌套选择(子选择)的情况下执行此操作的方法会快得多。可悲的是,据我所知,使用 GROUPS 和 MIN 也避免了子选择,这在 mysql 中是无法做到的【参考方案2】:

我建议使用具有分组的连接子查询来执行此操作,例如:

更新作者表 设置最早 = bt.[年份] 从 AuthorTable 作为 At 加入 ( 从 Booktable 中选择 AuthorFK, min(Year) 作为 [Year] 作者FK分组 ) 作为 bt 在 at.AuthorID = bt.AuthorFK

【讨论】:

以上是关于SQL:基于另一个的MIN批量更新表?可能很容易,但卡住了的主要内容,如果未能解决你的问题,请参考以下文章

基于另一个表的 SQL 更新

SQL两表关联批量更新一列数据下面有数据参考

oracle中怎么批量更新某列数据

连接两个表,其中一个包含另一个

mysql 数据库表批量更新,需要set的数据是另一个表中的字段

mysql 数据库表批量更新,需要set的数据是另一个表中的字段