Mysql SQL UPDATE语句,用于基于另一个现有行更新列
基本上,我有一个与下表格式相似的表 我想做的是基于这个逻辑更新Col4Mysql 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
- 如果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;