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

SQL Query retrieving info from 3 tables which are in relationship

我什至不知道如何命名我的问题或搜索什么来解决它所以如果我描述不当请不要介意我。

我有 3 个表:

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

考试(id, date, patient_id*, notes)

诊断(id,诊断)

ExaminationDijagnose(id, diagnose_id*, examination_id*)

所以我想做一个查询,其中只有一个输入参数,那就是ExaminationID(主键)。结果将是包含

列的一行

(examination_id,日期,姓名,诊断(数组),注释)。

诊断列将是一个基于 examination_id 外键的数组。

如果考试编号为 10,则像这样 诊断: 1 - 流感 2 - 高温

ExaminationDijagnose 将 1 , 1 , 10 1 , 2 , 10

我需要这样的输出 1(ExaminationID), date, patient_name(patient_id*), Array(Flu, High Temperature), notes)

那个数组是拼接的,所以diagnostic period diagnose。 "流感、高温、骨折等...

如果我描述的不好,再次抱歉。 谢谢

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

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 = ?

您可以使用 JOINGROUP_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;

https://dev.mysql.com/doc/refman/5.7/en/data-types.html MySQL 不支持数组,但您可以根据需要使用 JSON 数组。

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

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