2014-08-30 3 views
1

난 것을 알고있는 경우와 유사한이 옵션없이 뭔가 내가 데이터베이스 에서 줄을 업데이트하는 데 사용할 수 있다면 내가특정 라인에서 해당 업데이트를 어떻게 쿼리합니까?

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

같은 쿼리 에게 라인 3 에서 해당 업데이트 또는 선택 항목을 할 수있는 방법을 SQL 서버를 사용하여 옵션은 내 데이터베이스에서이 같은/완벽한 같은 2 개 행이로 관심의 행을 가정이

기본 키

+0

업데이트 할 테이블의 이름은 무엇입니까? 단어 "업데이트"바로 뒤에 있어야합니다. 테이블에 기본 키가 있습니까? 그렇다면 어떤 열 (들)에? –

+0

귀하의 바로 기다려야 할 것입니다 업데이 트를 할 것입니다 기본 주요 원인은 2 개의 동일한 유사한 행 수 있습니다 –

+0

예제 데이터를 제공 할 수 있습니까? PK없는 경우 특정 행을 업데이트 할 수 있는지 여부는 중복 행이 있는지 여부에 따라 다르며, 업데이트하려는 행과 동일한 테이블에 행이있는 경우 row_number () 테이블 위로 –

답변

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 문을 실행하여 표시된 행을 변경할 수 있습니다. 이 최고로 아니라 "세 번째 행"바라 보았다되지만 FNAME 현재 'asaf'인 행으로, LNAME은 '쉬', 게임은 '축구'입니다이며 취미는 '컴퓨터'

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 행 중 하나를 업데이트합니다. 테이블의 행에 대해서는 "순서"와 같은 것이 없다는 것을 명심하십시오. 또한 기본 키를 추가하여 나중에 row_number()에 의존하지 않고 특정 행을 고유하게 업데이트 할 수 있도록해야합니다.

+0

네, 실제로 테이블에 행을 복제합니다. –

+0

@AsafShazar 2+ 이상의 행 중 하나만 업데이트하는 쿼리를 추가했습니다. 이벤트가 2 개 이상 존재합니다. 그러나 (다른 이유로) 위에서 수행 한 추가 단계를 수행 할 필요가 없도록 테이블에 기본 키를 추가해야합니다. 대답은 –

+0

입니다. –

관련 문제