2009-05-27 77 views
0

請幫助我。如果有相同的記錄,我會增加數值,或者如果沒有它,插入想要做0 0

select * from hoge where id=xxx; 

如果有一個數據,我這樣做是爲了做到這一點,但儘管我實現這一步,還有如果在一個程序中,並插入霍格組數據= 0是很麻煩的,如果更新霍格組數據=數據+1,結果是0行。

難道你不會意識到這個過程由SQL打擊? 將hoge select id,data + 1替換爲來自hoge的數據,其中id = x; 當它是這個SQL時,結果不可用,因爲在NULL的情況下數據沒有輸入。

畢竟不是在一個句子中是否由一個複數或一個梳子來存在嗎? 如果有更簡單的方法,請教它。

人們事先感謝你。

+0

我不知道你在問什麼。我最好的猜測是:你想檢查是否有給定ID的行,如果有,增加一個數據字段,如果它們不是,創建一個0行? – Eric 2009-05-27 02:50:47

回答

0

您似乎在問如何創建一個行,如果它尚不存在,或者如果它存在,則更新其中的一個字段。

(DBMS爲」不提供某種形式的UPSERT語句)的一般做法是:

insert into TBL(keycol,countcol) values (key,-1) 
update TBL set countcol = countcol + 1 where keycol = key 

你需要的,如果該行已經存在,忽略在第一行的任何錯誤(這應該發生)。然後第二條語句將更新它。

最初插入一個零條目並不常見,因爲您通常在第一次添加時就添加了一個「事物」。在這種情況下,插入會將值設置爲0,而不是-1。

3

如果我正確理解問題(我不認爲OP是以英語爲母語的人),則可以使用ON DUPLICATE KEY在MySQL中執行此操作。

INSERT INTO table 
    (column1, column2, ...) 
VALUES 
    ('initial value for column1', 'initial value for column2', ...) 
ON DUPLICATE KEY UPDATE 
    column1 = column1 + 1, column2 = 'new value for column2'; 
相關問題