我有一个看起来像这样的表:
Number | Name
--------+--------
123 | Robert
这就是我想要做的:
如果号码已经在数据库中,请不要插入新记录。
如果编号不在数据库中,但名称在数据库中,则创建一个新名称并将其插入。因此,例如,如果我有一个包含123
forNumber
和Bob
for的记录Name
,我不想插入它,但是如果我得到一个包含456
forNumber
和Robert
for的记录name
,我会插入456
and
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)
但是如果您只希望它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
感觉的存在进行一点检查对我来说有点像是开销。因此,我最好的建议是强制执行唯一性。
问题内容: 范例: 在此表中,我需要获得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的括号内