如何在特定行查询该更新?

时间:2014-08-30 20:28:49

标签: sql

我使用sql-server如何进行查询 更新或选择第3行的项目 喜欢

update Persons set Fname='name',Lname='lname' game="hmm" where line =3

如果没有选项可以用来更新数据库中的一行 如果知道我的DataBase中有2个相同/完全相同的2行选项

没有主键

1 个答案:

答案 0 :(得分:2)

假设感兴趣的行是下面显示的第三行(这是您给出的示例数据):

Fname   Lname   game        hobby
asaf    sh      football    computer
yaron   ed      none        goldSmith
asaf    sh      football    computer    <--- This is the row you want to update

您可以运行以下UPDATE语句来更改我指示的行。这最好看的不是&#34;第三行&#34;但是作为fname当前的行#asaf&#39;,lname是&#39; sh&#39 ;,游戏是&#39;足球&#39;,爱好是&#39;计算机&#39; ;

with sub as(
select p.*, row_number() over (partition by fname, lname, game, hobby
                               order by fname, lname, game, hobby ) as rn
from persons p)
update sub
   set fname = 'new_fname', lname = 'new_lname', game = 'new_game'
 where rn = 1
   and fname = 'asaf'
   and lname = 'sh'
   and game = 'football'
   and hobby = 'computer';

小提琴示例: http://sqlfiddle.com/#!6/83fb0/1/0

以上内容将更新包含您要定位的值的2行中的一行。请记住,没有&#34; order&#34;关于桌子上的行。此外,您应该添加一个主键,以便将来可以唯一地更新特定行,而不必依赖row_number()