2014-03-05 37 views
0

您好我試圖找到一種方式的UPDATE或INSERT數據與一個查詢。更新或INSERT在同一個查詢沒有唯一值

我有一個表是這樣的:

+------+-------------+ 
| User | action_type | 
+------+-------------+ 
| Jon | 1   | 
| Kate | 2   | 
| Jon | 4   | 
+------+-------------+ 

我想只插入如果沒有喬恩值喬恩新的價值。

如果我有Jon的值,我想用Jon更新所有的行。

我已閱讀關於INSERT ... ON DUPLICATE KEY UPDATE的內容,但我沒有獨特的值。

感謝您的幫助。

+1

您需要的程序[點擊查看該(http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html) – starko

+0

可以告訴你這個樣的結果嗎? – Hamidreza

回答

1

你可以計算jon的條目。如果存在更新,則插入。 如果你希望只使用SQL實現,你可以使用一個存儲過程

是這樣的:

CREATE PROCEDURE insertorupdate (IN name VARCHAR(20)) 
BEGIN 
    DECLARE numJon INT; 
    SELECT COUNT(*) INTO numJon FROM table WHERE User=name; 
    IF numJon > 0 THEN 
     // UPDATE ; 
    ELSE 
     // INSERT 
    END IF; 

END 

然後,你可以打電話給你存儲過程:

CALL insertorupdate('John'); 

如果你能做到這一點從你的應用程序,你可以調用相同的東西,但單獨。做一個選擇計數,測試如果計數是否大於0,然後在數據庫中插入或更新

0

不要像user468891的答案那樣計數。這可能會成爲性能問題。相反,只需檢查一個條目是否存在。只要找到條目,查詢就會返回true,count會繼續查找所有記錄。

DELIMITER $$ 
CREATE PROCEDURE insertorupdate (IN name VARCHAR(20)) 
BEGIN 
    IF (EXISTS(SELECT 1 FROM table WHERE User = name)) THEN 
     // UPDATE... 
    ELSE 
     // INSERT... 
    END IF; 
END $$ 
DELIMITER ; 
相關問題