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批量更新表?可能很容易,但卡住了的主要内容,如果未能解决你的问题,请参考以下文章