MySQL - 在单独的列中跟踪重复的记录类型
MySQL - Keeping track of duplicate record types in a separate column
我有一个名为 test
的 table,其中包含字段 name
、sequence_no
、id1
和 id2
(最后两个是外键)。当我插入一条新记录时,我想检查 table 中有多少条目与我添加的条目相同 id1
和 id2
,然后我想使用它count+1 作为 sequence_no 字段。换句话说,我想跟踪我做了多少次测试,这是由两个 id 标识的。
我试图在我的插入中简单地做一个 sequence_no = (select count(*)+1 from test where id1=newid1 and id2=newid2)
,但我想我不能 select 形成我插入的 table。
关于如何在单个查询中执行此操作的任何想法?我觉得我应该使用 ON DUPLICATE,但我不确定如何实现它。
如果您不想创建具有相同 (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 元组的次数,那么它就不同了。我真的不建议将此信息存储在 table 中,您可以在查询中即时计算它,通常使用 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
我有一个名为 test
的 table,其中包含字段 name
、sequence_no
、id1
和 id2
(最后两个是外键)。当我插入一条新记录时,我想检查 table 中有多少条目与我添加的条目相同 id1
和 id2
,然后我想使用它count+1 作为 sequence_no 字段。换句话说,我想跟踪我做了多少次测试,这是由两个 id 标识的。
我试图在我的插入中简单地做一个 sequence_no = (select count(*)+1 from test where id1=newid1 and id2=newid2)
,但我想我不能 select 形成我插入的 table。
关于如何在单个查询中执行此操作的任何想法?我觉得我应该使用 ON DUPLICATE,但我不确定如何实现它。
如果您不想创建具有相同 (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 元组的次数,那么它就不同了。我真的不建议将此信息存储在 table 中,您可以在查询中即时计算它,通常使用 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