gpt4 book ai didi

mysql - 结合两个查询来检查 MySQL 中的重复项?

转载 作者:可可西里 更新时间:2023-11-01 06:32:27 25 4
gpt4 key购买 nike

我有一个看起来像这样的表:

Number  | Name 
--------+--------
123 | Robert

这就是我想要做的:

如果该号码已经在数据库中,则不要插入新记录。

如果 Number 不在数据库中,但名称在数据库中,请创建一个新名称并将其插入。因此,例如,如果我有一条记录,其中包含 123NumberBobName,我不会我不想插入它,但是如果我得到一条包含 456NumberRobertname 记录,我会插入 456Robert1。我打算像这样单独检查重复项:

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 约束。它可以是 PRIMARY KEYUNIQUE KEY

如果该列没有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 不是唯一的,但如果它确实存在,我不想输入记录。” - 它不会做任何如果您不想在列上添加唯一性,请注意。您如何知道该号码是否已经存在?对 Number 的存在做一点检查对我来说感觉有点开销。因此,我最好的建议是强制执行唯一性。

关于mysql - 结合两个查询来检查 MySQL 中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16449377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com