Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL UPDATE语句,用于基于另一个现有行更新列_Mysql_Sql - Fatal编程技术网

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

Mysql SQL UPDATE语句,用于基于另一个现有行更新列,mysql,sql,Mysql,Sql,基本上,我有一个与下表格式相似的表 我想做的是基于这个逻辑更新Col4 如果Col2为null,则使用Col3更新Col4 如果Col2不为null,则查找Col1中与Col2中的值匹配的值。使用col3中的相应值更新col4 例如,给定此表: | Col1 | Col2 | Col3 | Col4 | ----------------------------- | 1 | 2 | A1 | 2 | ----------------------------- | 2

基本上,我有一个与下表格式相似的表

我想做的是基于这个逻辑更新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  |

任何方向都将不胜感激

类似的方法应该有效(未经测试):

这应该可以让您测试它:

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
希望这有帮助


皮特

类似的东西在甲骨文中可能会起作用

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

当然,如果
从myTable中选择col3,其中col1=col2
返回多行,则此查询将不起作用。但我想您已经知道您的数据是否足够干净,可以正常工作。

哪个数据库?到目前为止你试过什么?你看过CASE语句了吗?我使用的是MySQL 5.1。我已经尝试了与SQL Server中的更新集类似的逻辑,但没有成功。我最终将实现一个Case语句,但我遇到的问题是在不为null的情况下执行逻辑。您是否可以发布您已经尝试过的代码,以及它给出的错误?当Col2为null时,将其设置为左外连接。案例的第一部分考虑Col2为null。我把它做成了一个内部函数,因为OP只关心它不为空的时候。Philip是对的。如果将第三行设置为内部联接,则会丢失该行。我的观点是,虽然左联接肯定会完成任务,但您选择的行比需要的多,这会降低查询的效率。确实会从
col2Matches
中丢失第3行,但您不需要它,因为您是从
中获得该值的(第3行肯定存在)。不管怎样,很高兴我能帮上忙。
update myTable
set col4 = case when col2 is null then col3
                else (select col3 from myTable where col1 = col2)
           end;