我希望在表格中找到副本时更新第一条记录。
CREATE TABLE tblauthor
(
Col1 varchar(20),
Col2 varchar(30)
);
CREATE TABLE tblbook
(
Col1 varchar(20),
Col2 varchar(30),
Col3 varchar(30)
);
INSERT INTO tblAuthor
(Col1,Col2)
VALUES
('1', 'John'),
('2', 'Jane'),
('3', 'Jack'),
('4', 'Joe');
INSERT INTO tblbook
(Col1,Col2,Col3)
VALUES
('1', 'John','Book 1'),
('2', 'John','Book 2'),
('3', 'Jack','Book 1'),
('4', 'Joe','Book 1'),
('5', 'Joe','Book 2'),
('6', 'Jane','Book 1'),
('7', 'Jane','Book 2');
我想要完成的更新结果应该如下更新记录。我想要tblbook.col3 = 1st。
select * from tblbook
('1', 'John','1st'),
('3', 'Jack','1st'),
('4', 'Joe','1st'),
('6', 'Jane','1st');
似乎无法用不同的方式完成这项工作。
答案 0 :(得分:3)
使用ROW_NUMBER
为按作者姓名(col2
)分组的每一行分配一个数字,然后更新数量为1
update tblbook set col3 = '1st'
where col1 in(
select
col1
from (
select
tblbook.col1,
tblbook.col2,
tblbook.col3,
ROW_NUMBER() OVER (PARTITION BY tblbook.Col2 order by tblbook.col1) as rownum
from tblbook
left outer join tblauthor on tblbook.col2 = tblauthor.col2
) [t1]
where [t1].rownum = 1
)
答案 1 :(得分:0)
如果您要更新tblbook
,那么第三列是重复的'1st'
,那么您可以使用可更新的CTE轻松完成此操作:
with toupdate as (
select tbl2.*, row_number() over (partition by col2 order by col1) as seqnum
from tbl2
)
update toupdate
set col3 = '1st'
where seqnum = 1;
这是我能够最了解你真正想要的东西。