단일 기본 키 필드 (KeyID)와 외부 키 필드 (ForeignID)가있는 테이블 (예 : Example)을 상상해보십시오. 이 외부 키는 테이블의 행을 별도의 테이블에있는 외부 행/항목에 연결하여 다 대일 관계를 설정하는 데 사용됩니다. 그러나 많은 행에 대해 이러한 관계가 존재하지 않으므로이 외부 키 필드는이 행에 NULL
입니다.NULL = NULL을 true로 설정하려면 SQL에서 수행 할 작업은 무엇입니까?
이제 하나의 KeyID (예 : 123)가 주어진 경우 모두 개의 일치하는 ForeignID 값을 가진 결과 집합을 가져 오는 데 필요한 기본 SQL은 무엇입니까?
나는 순진하게도 다음과 같은 SQL 시작 : 우리의 일치 키 행이 ForeignID에서 정상적인 값을 가질 때
는SELECT E1.*
FROM Example E1
JOIN Example E2
ON E2.KeyID = 123
AND E2.ForeignID = E1.ForeignID
이건 그냥 잘 작동합니다. 그러나 ForeignID가 NULL
일 경우 실패 (아무 것도 반환하지 않음)합니다. 몇 가지 초기 검색을 수행 한 후, 이제 왜 (this one과 같은 질문을 읽은 후) 이해하지만이 제한을 해결하는 방법에 대한 멋진 해결책을 찾지 못했습니다.
허용 된 SQL Server에는 변경할 수있는 설정이 ANSI_NULLS
이지만 더티하고 잠재적으로 문제가되는 해킹처럼 보입니다.
또는 항상 0과 같은 자체 null 값을 구성하고 NULL
대신 ForeignID 열에 고정 할 수는 있지만이 열에 대해 설정 한 외래 키 제약 조건이 깨질 수 있습니다.
그래서 내가 원하는 것을 어떻게 성취 할 수 있을까요?
당신이하고있는 일을 OP와 SQL 서버 – Blorgbeard
Duh에게 더욱 분명하게 보여줍니다. 대답은 간단하고 쉽고 명백합니다. 그래서 당연히 생각하지 않았습니다. -_- – Jeremy
이로 인해 E2의 NULL 행과 E1의 NULL 행에 대한 데카르트 조인이 발생합니다. 테이블 중 하나에 NULL이있는 단 하나의 행이있는 한, 당신은 잘되어야합니다. –