【发布时间】:2021-08-19 15:45:57
【问题描述】:
我有 2 张桌子:
1-brokers(这是一家可以有多个经纪人个人的公司)
和
2-brokerIndividuals(一个person/individuals表,有所属经纪公司的外键和个人信息)
我正在尝试为 brokers 表创建一个唯一索引列,其中字段 companyName 是唯一的,isDeleted 是 NULL。目前,该表已经填充,所以我想编写一个 SQL QUERY 来查找重复的行,只要有相同的行 companyName 和 isDeleted=NULL,我想执行 2 个操作/查询:
1-保持第一行不变并将其他重复行(第一个重复行之后的行)行的isDeleted 列值更改为true。
2- 为第一行的重复行关联或更改brokerIndividuals 中的外键。
我正在尝试做的口头描述是:软删除重复的行并将它们对应的brokerIndividuals 与第一次出现的重复相关联。表需要出现 1 次 companyName,其中 isDeleted 是 NULL。
我正在使用 knex.js ORM,所以如果有帮助,您还可以建议使用 knex 函数的解决方案,但 knex 还不支持部分索引(Knex.js - How to create unique index with 'where' clause?)所以我必须使用原始 SQL 方法。另外我使用的数据库是 mssql(version: 6.0.1)。
【问题讨论】:
-
这听起来像是一次性操作——这是标准 SQL 中的一项简单操作,您需要特定于 knex 的解决方案吗?如果不标记具体的数据库平台。
-
嗨@Stu,我不介意knex 特定的解决方案,但我认为SQL 查询会更受欢迎。我们使用的数据库是MySql。
-
尝试在其中一个值可以是
null的组合上创建直接UNIQUE约束时会遇到问题,因为 null = null 不会违反约束。跨度> -
您向我展示的错误似乎不是 MySQL 错误。您真正使用的是什么数据库(和版本)?调整有问题的标签以匹配。如果错误来自您的接口层,则您可能有与数据库无关或数据库之外的限制。
标签: sql sql-server knex.js