Liquibase:删除重复行
Liquibase: deleting duplicate row
我正在编写一个新的变更集来在我的 table 上定义一个唯一键,但似乎以前的变更集在我的 table 中插入了重复的行(重复,我的意思是两个条目我的新唯一约束的目标列上的相同值)。
由于生产限制,我无法修改以前的变更集。
因此,在添加约束之前,我想删除重复的行。
这是我的变更集:
{
"changeSet": {
"id": "123",
"author": "me",
"changes": [
{
"delete": {
"tableName": "foo",
"where": "name = 'myname'"
}
},
{
"insert": {
"tableName": "foo",
"columns": [
{
"column": {
"name": "id",
"valueSequenceNext" : "foo_seq"
}
},
{
"column": {
"name": "name",
"valueComputed": "myname"
}
}
]
}
},
{
"addUniqueConstraint": {
"columnNames": "name",
"constraintName": "uk_fooname",
"tableName": "foo"
}
}
]
}
假设我的重复条目包含名称 'myname'。如您所见,我正在删除所有重复的条目,然后我必须重新插入我的唯一条目。
我只需要删除我的删除语句中重复的行之一,而不是同时删除两行然后再次插入。但是我找不到任何解决方案来在 row_number.
上设置 where 条件
有人知道如何在 where 子句中添加行号吗?
感谢您的帮助。
如果我没理解错的话,这里是xml changeSet
。对不起,我从来没有用json
来写changeSets
,但我认为这个想法是一样的。
此 changeSet 将删除列 name
中的所有重复条目,并仅保留最低的条目 id
。
<changeSet id="changeset-id" author="John Doe">
<preConditions onFail="MARK_RAN">
<columnExists tableName="foo" columnName="id"/>
<columnExists tableName="foo" columnName="name"/>
</preConditions>
<sql>
DELETE f1 FROM foo f1, foo f2
WHERE f1.id > f2.id
AND f1.name = f2.name;
</sql>
</changeSet>
执行此 changeSet
后,您可以创建 unique constraint
.
我正在编写一个新的变更集来在我的 table 上定义一个唯一键,但似乎以前的变更集在我的 table 中插入了重复的行(重复,我的意思是两个条目我的新唯一约束的目标列上的相同值)。
由于生产限制,我无法修改以前的变更集。
因此,在添加约束之前,我想删除重复的行。
这是我的变更集:
{
"changeSet": {
"id": "123",
"author": "me",
"changes": [
{
"delete": {
"tableName": "foo",
"where": "name = 'myname'"
}
},
{
"insert": {
"tableName": "foo",
"columns": [
{
"column": {
"name": "id",
"valueSequenceNext" : "foo_seq"
}
},
{
"column": {
"name": "name",
"valueComputed": "myname"
}
}
]
}
},
{
"addUniqueConstraint": {
"columnNames": "name",
"constraintName": "uk_fooname",
"tableName": "foo"
}
}
]
}
假设我的重复条目包含名称 'myname'。如您所见,我正在删除所有重复的条目,然后我必须重新插入我的唯一条目。
我只需要删除我的删除语句中重复的行之一,而不是同时删除两行然后再次插入。但是我找不到任何解决方案来在 row_number.
上设置 where 条件有人知道如何在 where 子句中添加行号吗?
感谢您的帮助。
如果我没理解错的话,这里是xml changeSet
。对不起,我从来没有用json
来写changeSets
,但我认为这个想法是一样的。
此 changeSet 将删除列 name
中的所有重复条目,并仅保留最低的条目 id
。
<changeSet id="changeset-id" author="John Doe">
<preConditions onFail="MARK_RAN">
<columnExists tableName="foo" columnName="id"/>
<columnExists tableName="foo" columnName="name"/>
</preConditions>
<sql>
DELETE f1 FROM foo f1, foo f2
WHERE f1.id > f2.id
AND f1.name = f2.name;
</sql>
</changeSet>
执行此 changeSet
后,您可以创建 unique constraint
.