2017-07-19 97 views
0

我有以下数据库:高级查询没有得到任何结果

enter image description here

数据库说明

如果未显示从表中病人所谓的patient包含patient_id和patient_name_en可以在每次访问诊所(表访问)时出现多个症状,以便每次访问时可以看到多个医生/护士。

每位医生都可以为患者指定多种诊断,从这里您可以看到我们有一个连接到consultation的表diagnosis

完成咨询后,医生应该指定患者应该服用的药物以及服用多少药。这里是药房的一部分,它包含3个表格:

  1. medication:一般药物清单;
  2. med_pharmacy:如果我们有一定数量的特定药物,它会出现在这张表中;
  3. consultation_med:它与consultation表连接,在这里我们可以指定med_pharmacy_id以及给予患者多少药片。

预期结果

我正在准备一个html页面生成使用AJAX的PHP脚本的报告:

enter image description here

请大家注意,在每次访问,患者可以看到多位医生/护士,这就是为什么咨询表每次就诊可能包含多行,因此可能会规定多种药物。因此,在HTML页面,我们将不得不从红色开始多行:

enter image description here

我做了一个查询什么是以下几点:

select t1.visit_id, 
t1.consultation_type, 
t3.patient_name, 
t3.patient_id, 
t3.nationality, 
t1.date_of_visit, 
t2.complication_name, 
t2.consultation_result, 
t5.doctor_name, 
t6.nurse_name, 
t8.med_name, 
t4.given_quantity, 
t4.medication_collector 
FROM visit t1, consultation t2, patient t3 
LEFT JOIN consultation_med t4 USING (consultation_id, med_pharmacy_id, clinic_id) 
LEFT JOIN doctor_list t5 USING (doctor_list_id, doctor_name, clinic_id) 
LEFT JOIN nurse_list t6 USING (nurse_list_id, nurse_name, clinic_id) 
LEFT JOIN med_pharmacy t7 USING (med_pharmacy_id, med_id, clinic_ic) 
LEFT JOIN medication t8 USING(med_id, med_name, clinic_id) 
WHERE t1.visit_id = t2.visit_id 
AND t2.consultation_id = t4.consultation_id 
AND t1.patient_id = t3.patient_id 
AND t1.clinic_id = t3.clinic_id 
AND t5.doctor_list_id = t2.doctor_list_id 
AND t6.nurse_list_id = t2.nurse_list_id 
AND t7.med_id = t8.med_id 
AND t1.clinic_id='361' AND t1.patient_id='361-0100' AND t1.visit_id='124' 

我不停收到此错误:

Error Code: 1054. Unknown column 'consultation_id' in 'from clause'

然后我尝试下面的查询,但仍然没有得到所要的结果:

select t1.visit_id, 
t1.consultation_type, 
t3.patient_name_en, 
t3.patient_id, 
t3.nationality, 
t1.date_of_visit, 
t2.complication_name, 
t2.consultation_result, 
t5.doctor_name, 
t6.nurse_name, 
t8.med_name, 
t4.given_quantity, 
t4.medication_collector 
FROM visit t1 
LEFT JOIN consultation t2 ON t2.consultation_id = t4.consultation_id, patient t3 
LEFT JOIN consultation_med t4 
LEFT JOIN doctor_list t5 ON t5.doctor_list_id = t2.doctor_list_id 
LEFT JOIN nurse_list t6 ON t6.nurse_list_id = t2.nurse_list_id 
LEFT JOIN medication t8 ON t1.clinic_id = t8.clinic_id 
LEFT JOIN med_pharmacy t7 ON t7.med_id = t8.med_id 

WHERE t1.visit_id = t2.visit_id 

AND t1.patient_id = t3.patient_id 
AND t1.clinic_id = t3.clinic_id 

AND t1.clinic_id='361' AND t1.patient_id='361-0100' AND t1.visit_id='124' 

这些类型的多个连接的大型查询对我来说是新的。

+0

'LEFT JOIN咨询t2 ON t2.consultation_id = t4。consult_id,patient t3'为什么这条线上的',患者t3'如果您需要另一个JOIN写另一个JOIN – RiggsFolly

+0

请将样本数据,预期结果和实际结果发布,理想情况下为SQLFiddle。还要考虑比“t1/t2”更好的别名 - 它使查询更难理解。 –

+0

好吧,请帮助我找到解决方案。预期的结果恰好在html页表上。 – droidnation

回答

1

试试这个,我已经将某些情况移出了WHERE子句,并将其替换为表连接。在加入尚未声明的表格时,也可以重新安排连接。

select t1.visit_id, 
t1.consultation_type, 
t3.patient_name_en, 
t3.patient_id, 
t3.nationality, 
t1.date_of_visit, 
t2.complication_name, 
t2.consultation_result, 
t5.doctor_name, 
t6.nurse_name, 
t8.med_name, 
t4.given_quantity, 
t4.medication_collector 
FROM visit t1 
LEFT JOIN consultation t2 ON t1.visit_id = t2.visit_id 
LEFT JOIN consultation t3 ON t1.patient_id = t3.patient_id AND t1.clinic_id = t3.clinic_id 
LEFT JOIN consultation_med t4 ON t2.consultation_id = t4.consultation_id 
LEFT JOIN doctor_list t5 ON t5.doctor_list_id = t2.doctor_list_id 
LEFT JOIN nurse_list t6 ON t6.nurse_list_id = t2.nurse_list_id 
LEFT JOIN medication t8 ON t1.clinic_id = t8.clinic_id 
LEFT JOIN med_pharmacy t7 ON t7.med_id = t8.med_id 

WHERE t1.clinic_id='361' 
AND t1.patient_id='361-0100' 
AND t1.visit_id='124' 
+0

一个非常干净和坚实的解决方案。我很感激。 – 2017-07-19 10:15:00

+0

您在这里有这个重复,它不适合我:'左加入咨询t2上t1.visit_id = t2.visit_id 左加入咨询t3上t1.patient_id = t3.patient_id和t1.clinic_id = t3.clinic_id ' – droidnation

+0

我把它固定在'患者t3'上,现在我得到了无尽的行而不是4行 – droidnation