我有一个看起来像这样的表:
Number | Name --------+-------- 123 | Robert
这就是我想要做的:
如果号码已经在数据库中,请不要插入新记录。
如果编号不在数据库中,但名称在数据库中,则创建一个新名称并将其插入。因此,例如,如果我有一个包含123forNumber和Bobfor的记录Name,我不想插入它,但是如果我得到一个包含456forNumber和Robertfor的记录name,我会插入456and Robert1。我本来要检查重复项,例如:
123
Number
Bob
Name
456
Robert
name
Robert1
SELECT * FROM Person where Number = 123; //If number is not found SELECT * FROM Person where Name = 'Robert'; //If name is found, add a number to it.
有没有办法将两个语句组合在一起?
您的问题实际上有两个问题。第一个问题是使Number列唯一,第二个问题是Name通过添加数字(如果已经存在)来增加列。
第一部分
由于数字为UNIQUE,因此UNIQUE对列实施约束。可能是aPRIMARY KEY或a UNIQUE KEY。
UNIQUE
PRIMARY KEY
UNIQUE KEY
如果该列没有,KEY而您想创建该列PRIMARY,则ALTER语句如下:
KEY
PRIMARY
ALTER
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
但是如果您只希望它UNIQUE成为主键而不是主键,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
第二部分
实际上,您可以不使用join来执行此操作。
INSERT INTO TableName(Number, Name) SELECT 124 AS Number, CONCAT('Robert', COALESCE(MAX(CAST(REPLACE(Name, 'Robert', '0') AS UNSIGNED)) + 1,'')) AS Name FROM TableName WHERE Name LIKE 'Robert%'
一些细节:
当列上提供的值Number已经存在时,由于列是唯一的,因此将引发错误。我从已删除的帖子中读到一条评论,上面写着: “ ..数字不是唯一的,但如果确实存在,则我不想输入记录。” -如果您不想在列上添加 唯一性 ,则没有任何意义。您怎么知道这个号码是否已经存在?对Number感觉的存在进行一点检查对我来说有点像是开销。因此,我最好的建议是强制执行唯一性。