2016-07-19 77 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

相關問題