mysql - 不存在时插入null时更新

标签 mysql sql

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

这是我的目标表:

ID |职位|值(value)

1 | 1 |

2 | 1 |

2 | 2 |空

2 | 3 |空

2 | 4 | C

3 | 1 |

4 | 1 | D

4 | 2 | B

源表:

ID |值(value)

1 | C

2 |否

3 |

4 | D

5 |

6 |空

7 | B

想要的结果表:

ID |职位|值(value)

1 | 1 |

1 | 2 | C

2 | 1 |

2 | 2 |否

2 | 3 |空

2 | 4 | C

3 | 1 |

3 | 2 |

4 | 1 | D

4 | 2 |

5 | 1 |

7 | 1 | B

我的查询是:

合并目标 AST

USING (SELECT S.ID, MAX(E.POS) AS PosMax, MIN(E.POS) as PosMin, S.Value

来自来源S

LEFT OUTER JOIN 目标 E ON S.ID = E.ID

其中 S.Value 不为 NULL 并且 E.Value 为 NULL

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

ON T.ID = SC.ID

当匹配且 SC.Value 不为 NULL 且 EG.Value 为 NULL 且 T.POS = SC.PosMin

那么

更新设置

EG.Value = SC.Value

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

然后

INSERT(ID、位置、值)

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

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

ID 3的示例,它没有在位置2插入值B。

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

谢谢

杰伊

最佳答案

我认为您的 ON 也需要这个职位。 ON T.ID = SC.ID 且 T.pos=SC.minpos。

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

关于mysql - 不存在时插入null时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293044/

相关文章:

计算匹配查询的单词数的 MySQL 列格栅?

android - 如何将 SQL "NOT IN"运算符与 Room 一起使用

php - 使用php在openshift上连接数据库

php - 如何使用php同时向同一张 table 上的2个人发送电子邮件

java - 以最高效的方式使用 JDBC 获取 MySQL 查询返回的结果计数

mysql - 是否可以在mysql中使用另一个子查询中的数据?

Mysql 多重连接

SQL 产品矩阵

mysql - 将图像保存到 mysql 数据库时出现问题。程序运行完美,没有错误

Java SQL查询准备语句动态参数