当前位置: 首页 > 面试题库 >

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

苏星宇
2023-03-14
问题内容

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

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

这就是我想要做的:

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

如果编号不在数据库中,但名称在数据库中,则创建一个新名称并将其插入。因此,例如,如果我有一个包含123forNumberBobfor的记录Name,我不想插入它,但是如果我得到一个包含456forNumberRobertfor的记录name,我会插入456and
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

如果该列没有,KEY而您想创建该列PRIMARY,则ALTER语句如下:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
  • SQLFiddle演示

但是如果您只希望它UNIQUE成为主键而不是主键,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
  • SQLFiddle演示

第二部分

实际上,您可以不使用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%'
  • SQLFiddle演示
  • SQLFiddle演示( 添加了更多示例
  • SQLFiddle演示( 由于唯一性而引发异常

一些细节:

当列上提供的值Number已经存在时,由于列是唯一的,因此将引发错误。我从已删除的帖子中读到一条评论,上面写着:
..数字不是唯一的,但如果确实存在,则我不想输入记录。”
-如果您不想在列上添加 唯一性
,则没有任何意义。您怎么知道这个号码是否已经存在?对Number感觉的存在进行一点检查对我来说有点像是开销。因此,我最好的建议是强制执行唯一性。



 类似资料:
  • 问题内容: 范例: 在此表中,我需要获得Empid 1作为输出。因为它的bookid 8不止一次。 提前致谢.. 问题答案: 您可以使用: 但这会给您重复的内容。例如,如果您有1-8,1-8,1-9,1-9,则会得到1,1的输出,因为Empid 1具有两个不同bookid值的重复bookid。您将需要使用来过滤出重复的Empid。

  • 问题内容: 我有这个查询 和同一个1差异。不是 1周 ,而是 1个月 ,我该如何合并这两个并将它们分配给别名? 问题答案: 我将使用条件聚合来做到这一点: MySQL将布尔值视为整数,即为“ true”和“ false”。因此,使用可以计算匹配值的数量。(在其他数据库中,您将使用进行类似的操作。)

  • 问题内容: 我有一个存储过程,该过程将(或应该)将记录从一个表移动到另一个表。但是,我现在想创建一个过程来对照“ TableB”中的数据检查“ TableA”中的数据 基本上,我想提取不在“ TableB”中但在“ TableA”中的任何数字,是否可以通过LEFT JOIN来做到这一点?到目前为止,我一直未能成功找到丢失的文件,并且我删除了一些文件以形成测试用例。 问题答案: 您可以使用 或:

  • 问题内容: 我有一个库存表,我想创建一个报告,以显示订购商品的频率。 “库存”表: 基本上,我需要将这两个查询结合在一起。 查询打印库存余额: 打印销售统计信息的查询 我认为某种JOIN可以完成这项工作,但我不知道如何将查询粘合在一起。 所需的输出: 这仅是示例。也许我将需要添加更多条件,因为有更多列。是否存在将多个查询组合在一起的通用技术? 问题答案:

  • 问题内容: 查询1: 查询2: 我想将两个结果合并为两列,其中缺少一列=查询2-查询1以加快处理速度。我该怎么做?示例: 我有两个结果: // ----------------------------------------查询:1 1 2 3 4 // --------------------------------------查询:2 4 5 6 8 // ------------------

  • 问题内容: 结合这两个查询的正确语法是什么? 和 我试过了: 但我收到“ UNION和ORDER BY的用法不正确”。 编辑 此外,我希望结果在一行中返回。这样我就可以访问php中的值,例如 根据西蒙的建议,我不应该使用UNION,因为我想返回一行数据 问题答案: 您不能先进入,然后再进入。 编辑 但是你可以 将ORDER BY或LIMIT应用于单个SELECT,将子句放在包围SELECT的括号内