SQL UPDATE语句,用于根据另一个现有行更新列

时间:2012-01-30 14:37:15

标签: mysql sql

基本上我的表格格式与下表类似。

我想要做的是根据此逻辑更新Col4

  • 如果Col2为null,则使用Col3
  • 更新Col4
  • 如果Col2不为null,则在Col1中找到与Col2中的值匹配的值。使用col3中的相应值更新col4

例如给出此表:

| Col1 | Col2 | Col3 | Col4 |
-----------------------------
|  1   |   2  |  A1  |  2   |
-----------------------------
|  2   |   3  |  A2  |  3   |
-----------------------------
|  3   |{null}|  A3  |{null}|

将其更新为此表

| Col1 | Col2 | Col3 | Col4 |
-----------------------------
|  1   |   2  |  A1  |  A2  |
-----------------------------
|  2   |   3  |  A2  |  A3  |
-----------------------------
|  3   |{null}|  A3  |  A3  |

任何方向都会非常感谢!

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效(未经测试):

UPDATE  table
SET     col4 = CASE WHEN table.col2 IS NULL THEN table.col3 ELSE col2Matches.col3 END
FROM    table
        INNER JOIN table AS col2Matches
            ON  table.col2 = col2Matches.col1

这应该让你测试一下:

SELECT  CASE WHEN table.col2 IS NULL THEN table.col3 ELSE col2Matches.col3 END
FROM    table
        INNER JOIN table AS col2Matches
            ON  table.col2 = col2Matches.col1

希望这有帮助,

皮特

答案 1 :(得分:0)

这样的事情可能会在Oracle中发挥作用。

update myTable
set col4 = case when col2 is null then col3
                else (select col3 from myTable where col1 = col2)
           end;

当然,如果select col3 from myTable where col1 = col2返回多行,则此查询将无效。但我想你已经知道你的数据是否足够干净以便它可以工作。