실례합니다. 나는 특정 데이터베이스 쿼리로 어떤 일이 벌어지고 있는지를 이해하는 시간을 갖고있다. 불행히도 저를 위해이 쿼리를 사용하여 수행 할 작업 목록을 만들고 이해할 수없는 이유로 작업이 중단됩니다. 내 쿼리의 "미니"버전을 디버깅하려고했습니다.데이터베이스 쿼리에 미쳐 간다
나는 무엇을 찾으려고하는지 설명하겠습니다. 우리의 실습은 기본적으로 의학 개업의와 만나는 "시험"을 가지고 있습니다. 우리는 이러한 시험 중 일부를 청구하며 우리는 원장 테이블에 청구되는 것을 추적합니다. ,
이제 (우리가 법안을 처리 할 때 즉, 우리는 원장에 삽입 할) 나는 쿼리 할 경우 : 이것은 당신이 예상 정확히 어떤 결과
SELECT Patient.PatUnique,
Exam.ExamUnique,
Exam.[Date],
Patient.Last,
Patient.First
FROM Patient
INNER JOIN Exam ON Patient.PatUnique = Exam.PatUnique
: 환자의 목록을 날짜와 ExamUnique 숫자 (Exam 테이블의 키) 나는과 같이 쿼리를 수정하면
는하지만 :
SELECT Patient.PatUnique,
Exam.ExamUnique,
Exam.[Date],
Patient.Last,
Patient.First
FROM Patient
INNER JOIN Exam ON Patient.PatUnique = Exam.PatUnique
WHERE Exam.ExamUnique NOT IN (SELECT Ledger.ExamUnique FROM Ledger)
을 나는 기록을 얻을. 반면에 을 알고을 입력하면 테이블에없는 Exam.ExamUnique
이 있습니다. X
으로 익명으로 처리하십시오. 나는 달렸습니다 :
SELECT Ledger.ExamUnique FROM Ledger WHERE Ledger.ExamUnique = X
결과가 없습니다. 그래서 X
이 거기에 없습니다.
무엇이 누락 되었습니까? 누군가가 도움이 될 것입니다 생각하기 때문에 여기에
, 일부 샘플 데이터입니다 :Patient.PatUnique Patient.Last Patient.First
1 Smith Adam
2 Jones Sarah
Exam.ExamUnique Exam.PatUnique Exam.Date
1 1 01012016
2 1 01022016
3 2 01032016
Ledger.ExamUnique
1
2
쿼리의
예상 결과 :
Patient.PatUnique Exam.ExamUnique Exam.Date Patient.Last Patient.First
2 3 01032016 Jones Sarah
실제 결과 :
0 records
샘플 데이터와 해당 데이터의 예상 출력이 누락되었습니다. 디버깅에 도움이되는 조건을 생성 할 수없는 경우 쿼리의 문제점을 파악하는 방법은 무엇입니까? 또한 WHERE에서 NOT IN을 사용하는 대신 OUTER JOIN을 사용하고 Ledger.ExamUnique가 NULL 인 WHERE LEREger를 사용할 수 있습니다. NOT IN을 만족시키기 위해 각 행에서 SELECT를 실행하는 것보다 훨씬 빠릅니다. –
HIPAA에 우려가 있습니다. 내부 키를 멀리 줄 수도 없습니다. 내 논리를 확인할 수 있습니까? – nomen
외부 조인과 IS NULL은 흥미로운 아이디어입니다. 나는 그것을 시도 할 것입니다. – nomen