2011-01-27 3 views
3

나는이 같은 문을 작성하는 데 사용하고 MSSQL 2005를 사용 :복합 키에 대해 'where in'절에 대한 SQL 문을 작성하는 방법은 무엇입니까?

otherTable 복합 기본 키가 때이 작업을 수행 할 수있는 방법
delete 
from myTable 
where ID in (select ID from otherTable where deleted = 1) 

?

복합 키는 두 개의 열이 있습니다 (. 내 Google - Fu는이 그러나 내가 그들과 아무 경험이 할 열팽창 계수를 사용하여 제안)

docnum float 
version int 

MS SQL에서

답변

2

이 작업을 수행 할 수 있습니다 :

DELETE T 
FROM myTable T 
INNER JOIN otherTable OT 
    ON T.docnum = OT.docnum 
    And T.version = OT.version 

업데이트에 대해서도 비슷한 구문이 있습니다.

+0

감사합니다 - 어떤 이유로 내가 항상 삭제 문에 조인 멀리 사용 기피 그것은 나에게 발생하지 않았다. 나는 where 절을 추가해야만했다. 그렇지 않으면 이것이 자리를 잡았다. – Antony

+0

where 절도 보지 못했습니다 ... 내가 이런 식으로 테스트하는 경우, 보통 BEGIN TRANSACTION ... ROLLBACK 블록에서 수행합니다. –

+0

절대적으로 - 그들은 내가 쓰는 첫 번째 줄 ... – Antony

1

또한 키워드 존재 사용할 수 있습니다 @bennor

delete t1 
from myTable t1 
where exists (
    select * from otherTable where docnum = t1.docnum and version = t1.version 
)