当前位置: 首页 > 知识库问答 >
问题:

不存在空插入时更新

祖新觉
2023-03-14

我有一个表,有多条记录具有相同的ID但不同的值。我想从其他表复制记录到这个表。如果记录为空,我想更新到最小位置,或者如果值不存在,插入到下一个位置。

这是我的目标表:

ID|职位|价值

1 | 1 | A

2 | 1 | B

2 | 2 |空

2 | 3 |空

2 | 4 | C

3 | 1 | A

4 | 1 | D

4 | 2 | B

源表:

ID |值

1 | C

2|N

3 | B

4 | D

5|A

6 |空

7|B

想要的结果表:

ID|职位|价值

1 | 1 | A

1|2|C

2 | 1 | B

2 | 2 | N

2 | 3 |空

2 | 4 | C

3 | 1 | A

3|2|B

4 | 1 | D

4 | 2 | B

5 | 1 | A

7 | 1 | B

我的查询是:

将目标合并为T

使用(选择S.ID,最大值(E.POS)作为PosMax,最小值(E.POS)作为PosMin,S.值

来源于

S.ID=E.ID上的左外连接目标E

其中S.值不为空,E.值为空

按S.ID、S.Value)分组为SC

在T.ID=SC.ID上

匹配时,SC.值不为空,例如:Value为空,T.POS=SC.PosMin

然后

更新集

例如:价值=SC.价值

当不匹配且SC.值不为空时

然后呢

插入(ID,位置,值)

值(SC.D,ISNULL(SC.PosMax,0)1,SC.Value);

这只会用最小位置更新空值,如果不存在ID,则插入该值。如果ID存在。它不会插入,因为匹配的T.ID=SC.ID。

例如ID 3,它不会在位置2插入值B。

有人有不同的方法或策略吗?或者,如果ID相同而值不同,我必须编写第二个查询来插入。

谢谢,

杰伊

共有1个答案

鲜于高明
2023-03-14

我认为你也需要这个职位。在T.ID=SC.ID和T.pos=SC.minpos上。

构建SC的子查询应该是一个内部连接。如果目标中没有匹配的值,则不需要记录。

 类似资料:
  • 问题内容: 我有一个带有2个表的数据库,如下所示: 列是,并且是 和 在申请表中,我有2个编辑框,名称分别为和 如果用户像电子邮件一样插入一个新的负责人姓名, 那么在保存表格的过程中,我想将新的负责人姓名插入表中,请插入最后一个并将其更新为。 如果用户保持名称,但它更新电子邮件一样,然后我想在从1 =使用新的电子邮件地址和他们(其余和)保持不变。 如果负责人的名称相同,我想保留from表的原始引用

  • 问题内容: 如果存在,它就可以工作,但是如果不存在,我想将此数据作为新行插入。 更新 datenum是唯一的,但这不是主键 问题答案: Jai是正确的,您应该使用。 请注意,由于它是唯一键,因此不需要在update子句中包含datenum,因此它不应更改。您确实需要包括表中的所有其他列。您可以使用该函数来确保在更新其他列时使用正确的值。 这是使用适用于MySQL 的正确语法重写的更新:

  • 问题内容: 我在下面有一个SQL插入程序,它工作正常,但是我希望它检查DATE = xxxx,NAME = xxxx和JOB = xxx并更新HOURS(如果它们存在),否则插入新行。SQL可以做到这一点吗? 尝试以下具有相同结果的OR替换,每次都会添加一个新行。 例如: 如果以下内容位于数据库中,并且John要更新其工作时间,它将检查名称,日期,作业是否与尝试插入的值相同,并且它们是否仅更新HO

  • 问题内容: 我有一个产品对象,它属于某些类别,即经典的多对一关系。 我想插入和更新产品而不预先选择类别。像这样: 要么 是否可以在不选择类别的情况下进行更新和插入?我不想为此使用HQL或直接查询。 问题答案: session.load()专门用于此类情况。以下: 不会打数据库。但是,如果没有提供给定ID的类别,它将在稍后阶段(刷新期间或多或少)引发异常。 使用速度快且没有副作用(级联等)。

  • 问题内容: 是否有只查询记录的查询,如果不存在,则插入?我不想重复更新或替换。寻找一个查询解决方案,寻找其他答案,但不是我真正想要的。 表: 伪查询: 问题答案: 使用-与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前会删除该旧行。 http://dev.mysql.com/doc/refman/5.0/en/rep

  • 问题内容: 我有这样的Mysql表 假设该表的示例数据ID 现在,如果组合或对(member_id,doc_id)存在,我想在该表中插入;否则,如果status为0,则更新状态。这是我使用的sql查询 它应该用数据2 1 2 1更新第二行 如果我插入这个 它应该插入一个新行,其数据为4 2 1 0 但我无法解决。而且我认为在innodb引擎中,member_id和doc_id被引用到另一个表的主键