문제

SQL Server 2005.

응용 프로그램 데이터베이스에 외국의 주요 제약 조건을 추가하여 필요하지 않은 응용 프로그램 데이터베이스에 추가하고 있습니다. 당연히 데이터는 신뢰할 수 없게되었고 외국 키 필드에는 고아 항목이 있습니다.

설정:
두 테이블, 테이블 user 및 탁상. TableUser에는 기본 키 'userID'가 있으며 TableArder에는 외국 키 'userID'가 있습니다.

TableOrder.userid가 테이블 user.userid에서 일치하는 항목이없는 행을 어떻게 찾습니까?

예를 들어, TableOrder.userid의 값은 250이지만 250에 대한 tableuser.userid 키는 일치하지 않습니다.

도움이 되었습니까?

해결책

다음은 다음과 같습니다.

select * from TableOrder where UserID not in (select UserID from TableUser);

이런 종류의 쿼리를 작성하는 방법에는 여러 가지가 있습니다.

다른 팁

다른 일반적인 접근 방식은 왼쪽 우터 조인입니다.

SELECT * FROM TableOrder o
LEFT OUTER JOIN TableUser u ON o.UserID = u.UserID
WHERE u.UserID is NULL

이 쿼리는 WHERE 절없이 유용 할 수 있으며 해당 값을 탐색하고 확인하고 (존재하는 경우) 일치하지 않는 값을 볼 수 있습니다.

테이블에는 FK 제약 조건이 없었습니다. FK와 PK와 같이 사용되었지만 코딩되지 않았습니다. 믿음은 불필요한 오버 헤드라고 믿었습니다. 따라서 모든 열이 있지만 코딩 된 제약 조건은 없습니다. 그들이 시행되도록 그들을 넣으 러 갔을 때, 나는 많은 위반이 있음을 발견했습니다.

귀하의 질문은 문제를 강조합니다. 그들은 불필요한 오버 헤드가 아니며, 사람들이 일반 데이터베이스를 방해하는 것을 방지합니다.

Greg와 Brad의 답변이 모두 도움이되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top