2016-07-19 76 views
1

假设我有一个表:“MyTable”,我有两列:“val”和“val_new”。如果值与另一列的值相匹配,则插入NULL

现在我想插入新值到“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' 代替。

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

+0

为什么不加这两个值,然后处理,如果它们是相同的时后查询? – Takarii

+0

我想,你可以使用扳机 –

+0

@NicholasKrasnov谢谢你是对的。我想更新现有值。我编辑了我的问题。对不起,误会。 –

回答

1

您不必插入记录,而必须更新现有的记录。如果您运行插入命令,则会创建一条新记录。所以你表会有

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

我想你不需要这个输出。所以最好的选择是更新列。

您可以使用case语句,

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

是的,你有我的观点我想更新现有的行,但由于某种原因,我做了一个INSERT示例。我编辑了我的问题。感谢您的回答是正确的! –

+0

val_new = val应该是val = number,否则val_new应该是数字。你拥有它的方式是如果用户更新它,然后想做另一个更新来检查它。你想检查正在更新的数字是否与val匹配。这是又一步。 – CodyMR

+0

当val和val_new相同时,OP已经请求了一个条件,然后用null更新它。他只举了一个5的例子。所以不需要用5编码。 – XING

2

你的问题在某些部分似乎有点混淆。你的话似乎是一个新的行的方式是要创建,但它也似乎你想更新它?希望这是你想要的:)

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

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

+0

准确地说你明白了我的观点我甚至不知道为什么我用INSERT做了一个例子。整个事情是我想要更新现有值,但是INSERT没有任何内容。但上帝知道我为什么这么用这个动词,并用它做了一个例子(INSERT)。 –

+1

@lazarov哈哈。我认为这是因为我们如何用英语成长。我们学习null基本上什么都不是,所以如果某些东西为null,那么它是空的,并且当你涉及到sql /编程语言时,你插入到空。null是最显而易见的事情,而不仅仅是空虚。 – CodyMR

相关问题