2009-12-09 2 views
0

두 테이블, 환자 테이블 및 약속 테이블이 있습니다. 나는 의사가 당시에 로그인했는지에 따라 두 테이블에서 정보를 검색하려고 시도하고 있습니다. 내 저장 프로 시저는 다음과 같습니다.TSQL 복수를 예상 할 때 한 행 반환

ALTER PROCEDURE dbo.sprocGetAllAppointmentsForUser 
@UserID varchar(50) 
    AS 
SELECT Appts.appt_id, Appts.patient_id, Appts.dr_id, Appts.appt_time, Appts.appt_reason, p.patient_id, 
p.patient_first_name, p.patient_last_name, p.patient_addr, p.patient_city, p.patient_zip, 
p.patient_state, p.patient_phone, p.patient_healthcare, p.patient_diagnosis, p.patients_user_id 
FROM Patients p INNER JOIN Appts 
ON Appts.patient_id = p.patients_user_id 
WHERE Appts.dr_id = @UserID 
RETURN 

모든 약속 및 환자 정보가 정확해야합니까? 또는 나는 그것을 단순화하는 것이다. Heres는 일부 샘플 데이터 :

약속 테이블 :

appt_id  patient_id  dr_id 
    1    467    101 
    2    242    101 
    3    784    210 

만이 두 행이 구문은 소리를 보인다 (101)

+0

아, dr_id는 "doctor id"를 나타냅니다 ... –

답변

1

는 처음

SELECT 
    * 
FROM Appts 
WHERE Appts.dr_id = 101 

즉, 데이터가 appts 테이블에 괜찮 2 개 행을 반환하는 경우 단계에서이 문제를 조사하려고 : 당신이이처럼 주위 가입 변경하는 경우에는 다른 결과가 설정받을 수 있나요 당신이 반환 null 값을 보면

다음

SELECT 
    a.patient_id 
    ,p.* 
FROM Appts A 
LEFT JOIN Patients p 
    ON Appts.patient_id = p.patients_user_id 
WHERE Appts.dr_id = 101 

를 추가 p. * 부분에서 조인 조건에 이상이있을 경우 잘못된 필드에 참여할 수 있습니다. 또는 해당 patient_id에 대한 환자 기록이 Patient 테이블에 없습니다.

+0

위대한 일을했습니다. 고마워요! – Ryan

1

을 dr_id에 해당하는,하지만 당신은 확신에도 불구하고, 첫 번째 행을 반환합니다 JOIN 조건에서 p.patients_user_id 대신 p.patient_id를 의미하지 않았습니까? 데이터베이스 다이어그램을 보지 않고도 말하기가 어렵다.

+0

Matti에 동의합니다. 환자의 약속을 원하면 dr_id가 잘못되었을 가능성이 큽니다. 또한 약속에 dr (dr_id)이 없거나 dr_id가 다르면 해당 값이 반환되지 않습니다. –

+0

약속에는 항상 의사가 필요합니다 (프런트 엔드에 필요). 내 목표는 의사를위한 모든 약속을 찾는 것입니다. 그래서 나는 dr_id를 요구합니다.patient_id는 자동으로 증가하는 숫자입니다. patients_user_id는 사용자 테이블을 참조하는 외래 키입니다. – Ryan

1

당신은 그 의사에게 모든 약속 (환자가있는)을 갖게 될 것입니다 - 당신은 또한 그 약속에 환자들을 갖게 될 것입니다.

약속이 환자에게없는 경우 나타나지 않습니다.

환자에게 약속이 없으면 나타나지 않습니다.

환자가이 의사와 약속이 2 개인 경우 환자가 두 번 나타납니다.

약속이 2 명의 환자가있는 경우, 약속은 두 번 나타납니다.

+0

자동 증분 기본 키이므로 약속 1 개에 환자 2 명이있을 수 없습니다. 의사가 두명의 약속을 가지고 있다면 약속 정보와 환자 정보를 그 목록에 추가 할 수 있습니까? – Ryan

0

그냥 거친 추측

대신 Appts.patient_id = p.patients_user_id

시도 Appts.patient_id = p.patient_id

+0

이전 답변에서 언급했듯이 데이터베이스 설계 방식은 조금 벗어났습니다. patient_id 및 patients_user_id가 정확합니다. – Ryan

1

실제로 환자 테이블에 존재에 대해 당신이 looikng 모든 환자 식별자가 긍정적인가?

FROM Patients p 
RIGHT JOIN ApptsON Appts.patient_id = p.patients_user_id 
WHERE Appts.dr_id = @UserID 
관련 문제