【问题标题】:Updating a table in oracle from another table with duplicate records present从存在重复记录的另一个表中更新 oracle 中的表
【发布时间】:2017-01-13 18:32:55
【问题描述】:

我有两张桌子,比如说桌子书籍和桌子作者。

表书有4个字段,BookId、Title、Author、Publisher

表 authors 有 5 个字段 AuthorID、Title、Author、Publisher、Price

我想更新书籍以获取作者的价格字段。没有一个唯一键,因此标准是标题、作者或出版商是否匹配,然后将该价格添加到书籍中。在我的情况下,作者在 Title、Author 或 Publisher 中有许多重复的值,所以我会因为重复而出现更新错误。所以基本上我如何在 oracle 中使用该标准更新书籍,如果出现重复,只需选择任何记录,将它放在那里并不重要?其他语言有 top 命令可以用来做这样的事情,但看起来 Oracle 缺少这个。

我自己尝试了各种合并和更新语句,但没有成功。比如:

   UPDATE books n
   set n.price = (
   select t.price from authors t where 
   n.title= t.title or
   n.author = t.author or
   n.publisher = t.publisher)

但是该语句没有检查重复项并阻止它们因此失败,所以我错过了那个键。

【问题讨论】:

  • 这个要求没有意义。如果 BOOKS 表中的一本书按出版商与 AUTHORS 表中的一行匹配,则显示作为这本书的价格该出版商曾经出版过的任何书籍(一些随机书籍)的价格?为什么你会做那样的事情?
  • 我不做表,我只是按照他们的要求做。我同意这是愚蠢的。
  • @mathguy 我知道...有时我通过回答有关如何做坏事的问题来感觉自己是一个推动者。

标签: sql oracle


【解决方案1】:

简单的方法是:

 UPDATE books n
   set n.price = (
   select t.price from authors t where 
   ( n.title= t.title or
   n.author = t.author or
   n.publisher = t.publisher )
   and rownum = 1)

【讨论】:

  • 这就像一个魅力谢谢。我用谷歌搜索了它,你的方法基本上是因为缺少顶部而解决的,所以这是有道理的。谢谢。
猜你喜欢
  • 2012-03-23
  • 2023-03-08
  • 2012-10-29
  • 2013-05-19
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多