mysql-在单独的列中跟踪重复的记录类型

nhaq1z21  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(262)

我有一张table叫 test 带字段 name , sequence_no , id1 以及 id2 (最后两个是外键)。当我插入一条新记录时,我想检查表中有多少个条目是相同的 id1 以及 id2 作为我要添加的条目,那么我想使用count+1作为sequence\u no字段。换句话说,我想记录我做了多少次测试,这是由两个id标识的。
我试着做一个简单的 sequence_no = (select count(*)+1 from test where id1=newid1 and id2=newid2) 在我的insert中,但是我想我不能从我要插入的表中选择表单。
关于如何在单个查询中实现这一点,有什么想法吗?我觉得我应该用在复制品上,但我不知道该怎么做。

a14dhokn

a14dhokn1#

如果不想创建具有相同 (id1, id2) ,但增量 sequence_no 在现有行上,则可以使用 on duplicate key :

insert into test (name, sequence_no, id1, id2)
values ( -- your values here --)
on duplicate key update sequence_no = sequence_no + 1

这需要在上设置唯一键(或主键约束) (id1, id2) .
另一方面,如果您想要一些递增计数器来指示同一id元组被满足的次数,那么它是不同的。我不建议将这些信息存储在表中,您可以在查询中动态计算这些信息,通常使用window函数 row_number() (mysql 8.0提供)。为了使这一点有意义,您需要一个列来定义列的顺序(例如 ordering_id ),则可以执行以下操作:

select name, id1, id2, row_number() over(partition by id1, id2 order by ordering_id) sequence_no
from test

相关问题