我试着写一个SQL查询,将在列“RNAME”为说一个名字“杰克”表“人”检查,如果存在,则更新该行的其他插入新行与新RNAME。

心中已经一直在尝试if / else语句,但还没有看到他们是如何工作的。 还是有更好的方法去做我想没有什么的if / else? (我没有做太多这个SQL工作,我以前只做UPDATE,INSERT,DELETE,ALTER ...这东西还挺。

我有这个迄今为止:(如果插座是RNAME行中找到,那么更新它,否则插入新行)

SELECT * FROM persons IF 'jack' == rName BEGIN [UPDATE Statement] END ELSE BEGIN [ INSERT Statement] END

编辑:我不认为我很解释我想要的东西, RNAME都应该是唯一的名称,没有2应该是相同的。我心中已经试图对重复密钥更新,但它似乎只是插入新行新数据。但我想它来更新现有RNAME(插座)与新的数据行,在RNAME(千斤顶)应该留在该行相同,但其他领域应更新为新的数据提供的。

有帮助吗?

解决方案

在你的情况:

INSERT INTO persons(`rName`, `foo`) VALUES('jack', 'bar') ON DUPLICATE KEY UPDATE `foo` = VALUES(`bar`);

rName必须对这项工作的唯一关键。如果在表中的一个“插口”,则它更新字段foo与“酒吧”,如果没有“插口”,则它插入一个新行与rName =“插孔”和foo =“酒吧”。

其他提示

我看你使用MySQL。你想要MySQL的insert ... on duplicate key update语法。 文档

您与对重复密钥更新遇到的问题是,你的名字列没有唯一约束,以便通过表定义,您允许重复。

参见: http://dev.mysql.com/ DOC / refman / 5.0 / EN / replace.html

您可以做

REPLACE INTO persons(`rName`, `foo`) VALUES('jack', 'bar')

虽然,在技术上,如果有冲突的行已存在,它将被删除和替换,而不是更新。但是,这可能是你想要的东西呢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top