2012-01-12 4 views
0

나는 다음과 같은 열이있는 데이터베이스에 두 개의 테이블을 가지고 SQL :확인이

athleteId | sportTypeId 
205  | 5 
206  | 5 
206  | 6 
207  | 4 
208  | 1 
208  | 4 

을 인하여 내가 만든 오류 (으악)에, 두 번째 테이블이 있습니다 이 같은 일부 정보 :

표 2 *

athleteId | sportTypeId 
    205  | 4 
    206  | 4 
    207  | 4 
    208  | 4 
    NULL | 4 

나는 어떤 선수들에게 잘못 athleteId을 할당 했으므로, 내가해야할 일은 Table2의 모든 행을 확인하고 Table1에 일치하는 행이 있는지 확인하는 것입니다. Table2에서 athleteId 205206를 포함하는 행 (그들은 Table1에서 4sportTypeId이없는) NULLathleteId 세트를 가질 것입니다. athleteId 207208이 남아 있습니다 (Table1에 행이 있고 sportTypeId of 4).

일부 운동 선수는 Table1에 두 번 나타납니다.

저는 SQL Server 2008을 사용하고 있습니다.

고마워요!

답변

1

Table2에서 Table1에 일치하는 행이없는 행을 삭제하는 방법을 묻는 것이 맞습니까? 그렇다면 다음과 같이하십시오.

DELETE t2.* 
FROM Table2 AS t2 
LEFT JOIN Table1 AS t1 ON t2.athleteId = t1.athleteId AND t2.sportTypeId = t1.sportTypeId 
WHERE t1.athleteId IS NULL; 

이유는 왼쪽 조인과 where 절 때문입니다. Table1에 일치하는 레코드가 없으면 왼쪽 조인을 수행하면 t1.athleteId이 null이됩니다.

편집 : 방금 ​​대신 전체 행을 삭제하는 null로 athleteId을 설정하려면, 그것은 작은 수정의 :

UPDATE t2 
SET t2.athleteId = null 
FROM Table2 AS t2 
LEFT JOIN Table1 AS t1 ON t2.athleteId = t1.athleteId AND t2.sportTypeId = t1.sportTypeId 
WHERE t1.athleteId IS NULL; 
+0

내가 의미 정확히 무엇을 명확히하기 위해 시도 "제거" . 나는 당신이 그것의 요지로 간다고 생각합니다. 감사! –

+0

데이터베이스에 뭔가가 누락되어 있어야합니다. 나는 예상 한 결과를 얻지 못하고있다. 'Table2'의'athleteId'에있는'NULL' 항목이 차이를 만들까요? 내 질문을 업데이트했습니다. 도와 주셔서 감사합니다. –

+0

@TylerDeWitt이 경우에는 차이가 없어야합니다. 예기치 못한 결과를 보여줄 수 있습니까? – ean5533

1
update table2 set athleteid = null where not exists (
    select * 
    from table1 
    where athleteid = table2.athleteid and sporttypeid = table2.sporttypeid 
) 
+0

이것은 매력처럼 잘 작동했습니다. –

관련 문제