2009-12-09 5 views
0

J'ai deux tables, une table patient et une table de rendez-vous. J'essaie de récupérer les informations des deux tables en fonction du médecin connecté à ce moment-là. Ma procédure stockée est la suivante:TSQL Renvoyer une ligne en attendant plusieurs

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 

Est-ce que tous les rendez-vous et les informations patient doivent être corrects? Ou suis-je plus de simplifier. Heres certaines données de l'échantillon:

Nomination Tableau:

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

renverrons seulement la première ligne, même si il y a deux lignes correspondant à dr_id 101.

+0

Ah, donc «dr_id» signifie «doctor id» ... –

Répondre

1

essayer enquêter sur ce dans les étapes premier

SELECT 
    * 
FROM Appts 
WHERE Appts.dr_id = 101 

si cela renvoie 2 lignes les données sont ok dans votre table appts

puis ajoutez

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 

si vous voyez les valeurs nulles renvoyées dans p. * part, alors il y a quelque chose qui ne va pas avec votre condition de jointure, vous pouvez vous joindre à un mauvais champ. ou le dossier patient pour patient_id correspondant est absent dans le tableau Patients

+0

Cela a fonctionné très bien, merci! – Ryan

1

La syntaxe semble bien, mais êtes-vous sûr vous ne vouliez pas dire p.patient_id au lieu de p.patients_user_id dans la condition JOIN? Difficile à dire à coup sûr sans voir un diagramme de base de données cependant.

+0

Je suis d'accord avec Matti. Si vous cherchez des rendez-vous pour un patient, alors dr_id est probablement faux. De même, si le rendez-vous n'a pas de dr (dr_id) est nul ou que le dr_id est différent, ces valeurs ne seront pas retournées. –

+0

Un rendez-vous aura toujours un médecin (requis sur le devant). Mon but est de trouver tous les rendez-vous pour un docteur qui est pourquoi je réclame le dr_id.patient_id est un nombre auto-incrémenté, tandis que patients_user_id est une clé étrangère renvoyant à une table utilisateur – Ryan

1

Vous obtiendrez tous les rendez-vous (qui ont des patients) pour ce médecin - vous recevrez également les patients à ces rendez-vous.

Si un rendez-vous n'a pas de patient, il n'apparaîtra pas.

Si un patient n'a pas de rendez-vous, il n'apparaîtra pas.

Si un patient a 2 rendez-vous avec ce médecin, le patient apparaîtra deux fois.

Si un rendez-vous a 2 patients, le rendez-vous apparaîtra deux fois.

+0

Un rendez-vous ne peut pas avoir deux patients car il s'agit d'une clé primaire auto-incrémentée. Comment puis-je ajouter "si un médecin a deux rendez-vous, il obtiendra l'information de rendez-vous et l'information du patient" à cette liste. – Ryan

0

Juste une estimation grossière

au lieu de Appts.patient_id = p.patients_user_id

essayer Appts.patient_id = p.patient_id

+0

Comme mentionné dans une réponse précédente, la façon dont ma base de données est conçue est un peu «off». patient_id et patients_user_id sont corrects. – Ryan

1

Êtes-vous positif tous les patients ids vous looikng pour réellement exister dans la table patient? Avez-vous un résultat différent défini si vous changez le joint autour comme ceci:

FROM Patients p 
RIGHT JOIN ApptsON Appts.patient_id = p.patients_user_id 
WHERE Appts.dr_id = @UserID 
Questions connexes