如果值与另一列

时间:2016-07-19 12:22:21

标签: sql oracle

假设我有一张表:“MyTable”,我有两列:“val”和“val_new”。

现在我想在“val_new”中插入新值,但如果值相等('val'和'val_new'),我想要插入NULL。

----------------------
| id | val | val_new |
----------------------
| 1  |  5  |  NULL   |
----------------------
| 2  |  6  |  NULL   |
----------------------

让我们以此表为例。

现在:

UPDATE myTable mt
SET mt.val_new = '5'
WHERE mt.id = '1';

我希望val_new的值保持为NULL或更新为NULL而不是'5'。

编辑: 我想更新现有值而不是插入新行。

2 个答案:

答案 0 :(得分:2)

你的问题在某些方面似乎有点令人困惑。你的单词看起来像是一个新行的方式,但它似乎也想要更新它?希望这是你想要的:)

 UPDATE testVal Set val_new = CASE WHEN val = 5 THEN NULL ELSE 5 END

testVal是你的桌子。如果您想使用其他号码,请将5替换为您选择的号码。我使用5,因为您在示例中使用了它。

答案 1 :(得分:1)

您无需插入记录,而是必须更新现有记录。如果运行insert命令,将创建一条新记录。所以你的表将有

----------------
|val | val_new |
----------------
| 5  |  NULL   |
----------------
| 6  |  NULL   |
----------------
|    |         | <-- if val = val_new
----------------
|    |   6     | <==if val<> val_new.

我猜你不需要这个输出。因此,最好的选择是更新列。

您可以使用案例陈述

update <yourtable>
set val_new =case 
                when  val_new= val   then 
                NULL 
               else val_new
             end