SQL查询从3个关系中的表中检索信息

时间:2017-05-17 22:32:42

标签: mysql key foreign-key-relationship

我甚至不知道如何标题我的问题或搜索什么来解决它所以如果我没有正确描述,请不要介意我。

我有3张桌子:

患者( id ,姓名,......)

考试( id ,日期,patient_id *,备注)

诊断( id ,诊断)

ExamDijagnose( id ,diagnose_id *,examination_id *)

所以我想进行查询,其中只有一个输入参数,即ExamID(主键)。结果将是一行

(exam_id,日期,姓名,诊断(数组),备注)。

diagnoses列将是一个基于exam_id外键的数组。

如果考试ID是10,那就这样 诊断: 1 - 流感 2 - 高温

ExamDijagnose将是 1,1,10 1,2,10

我需要输出看起来像这样 1(ExamID),date,patient_name(patient_id *),Array(流感,高温),备注)

该阵列是连接的,因此诊断期诊断。 “流感,高温,骨折等......

如果我描述得很糟,请再次抱歉。 感谢

3 个答案:

答案 0 :(得分:1)

查询看起来类似于以下内容(已更新以包含诊断数组):

SELECT examination_id, date, name, GROUP_CONCAT(diagnose), notes
FROM Patient
INNER JOIN Examination ON Examination.patient_id = Patient.id
INNER JOIN ExaminationDiagnose ON ExaminationDiagnose.examination_id = Examination.id
INNER JOIN Diagnoses ON Diagnoses.id = ExaminationDiagnose.diagnose_id
WHERE Examination.id = ?

答案 1 :(得分:0)

您可以使用JOIN GROUP_CONCAT函数来获取诊断数组,例如:

SELECT e.id, e.date, p.id, p.name, notes, GROUP_CONCAT(d.diagnose)
FROM examination e JOIN ExaminationDiagnose ed ON e.id = ed.examination_id
JOIN patient p ON e.patient_id = p.id
JOIN diagnose d ON ed.diagnose_id = d.id
WHERE e.id = ?
GROUP BY e.id, e.date, p.id, p.name, notes;

答案 2 :(得分:0)

https://dev.mysql.com/doc/refman/5.7/en/data-types.html MySQL不支持Array,但如果需要,可以使用JSON Array。

如果您希望诊断列表成为您的选择查询的一部分而不考虑类型,则以下查询将为您提供逗号(,)分隔的诊断列表。通过用逗号(,)分割字符串,您可以稍后将其转换为所需的任何格式。

SELECT examination.id, examination.date, patient.name, group_concat(diagnoses.diagnose) as diagonses, examination.notes
FROM ExaminationDijagnose ed 
JOIN Examination examination on examination.id = ed.examination_id 
JOIN Patient patient on patient.id = examination.patient_id 
JOIN Diagnoses diagnoses on diagnoses.id = ed.diagnoses_id
GROUP BY examination.id, examination.date, patient.name, examination.notes