更新,而不是插入,如果行已经存在

问题描述:

我现在面临着SQL的问题,我已经得到了这样一个表中的两列之间的关系,他们作为唯一键(id,charid)链接在一起,并利用这层关系,我想确定我是否要插入与否,因此,如果按照已经存在更新,而不是插入,如果行已经存在

[charid: 1, id: 1]

我想更新它,而不是插入新行,但是如果我们插入一行像这样和charid 1,id 1已经存在,没关系,我们可以插入它。

[charid: 1, id: 1]

我怎样才能正确地做到这一点?我听说这可以通过对列使用限制来完成。

+0

唯一键也是主键吗? – Bohemian

SQL服务器:

UPDATE R 
SET R.COLUMN = VALUE 
FROM dbo.TABLE1 AS R 
INNER JOIN dbo.TABLE2 AS P 
     ON R.charid = P.id 

**编辑,其实你需要一个 “WHERE EXISTS” 子句的子查询。会稍微更新一下。

UPDATE R 
SET R.COLUMN = VALUE 
FROM dbo.TABLE1 AS R 
WHERE EXISTS (SELECT P.id 
       FROM dbo.TABLE2 AS P 
       WHERE R.charid = P.id) 

事实证明,当你有一个主键或两个,你可以做,而不是执行以下操作:

(请注意:你需要为这个ATLEAST一个主键)

INSERT INTO arcade (id, charid, highscore) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE highscore = ?

这使得当有一个重复的键时,它会更新行而不是尝试插入某些东西!