【问题标题】:SQL Update values based on VLOOKUP resultsSQL 根据 VLOOKUP 结果更新值
【发布时间】:2018-11-01 13:55:39
【问题描述】:

我正在使用 DataGrip,并且有一个包含 2 个表的 Oracle SQL 数据库。

我正在尝试使用来自另一个表的 vlookup/outer join 更新 Table01column01 的值(当前所有值都是 NULL) . Table01 和 Table02 都有一个公共列。这个想法应该是这样的:

UPDATE Table01 SET RescorceName = (
  SELECT AntennaSection 
  FROM Table02 
  WHERE Table01.CellName = Table02.Cellname
)

我在下面添加了一个示例,说明我希望结果是什么样的:

enter image description here

任何建议将不胜感激!

【问题讨论】:

    标签: sql oracle join sql-update


    【解决方案1】:

    您需要确保只更新部分记录

    UPDATE Table01 
    SET RescorceName = (
      SELECT AntennaSection 
      FROM Table02 
      WHERE Table01.CellName = Table02.Cellname
        -- note, this is a horrible way to solve the problem -- we should instead
        -- know why we are getting more than one row and change the query.
        AND ROWNUM = 1
    )
    WHERE Table01.CellName IN (
     SELECT Table02.Cellname
     FROM Table02
    )
    

    【讨论】:

    • 您好!如果我应用上述语法,我会收到以下错误:ORA-01427:single-row subquery returns more than one row
    • 这意味着SELECT AntennaSection FROM Table02 WHERE Table01.CellName = Table02.Cellname 为 Cellname 的单个值返回多行 -- 显然不可能将两个东西分配给 RescorceName。您要分配哪一个——这里的业务规则是什么?
    • 我仔细检查了 Table01.CellName 中有重复的值。
    • @RemusRaphael -- 所以你想要结果中的第一列?
    • @RemusRaphael -- 你可以在 oracle 中使用 ROWNUM -- 但这太可怕了。
    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多