【问题标题】:SQL Query retrieving info from 3 tables which are in relationshipSQL查询从3个有关系的表中检索信息
【发布时间】:2017-05-17 22:32:42
【问题描述】:

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

我有 3 张桌子:

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

检查(id、日期、patient_id*、备注)

诊断(id,诊断)

ExaminationDijagnose(id、diagnose_id*、examination_id*)

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

(examination_id、日期、名称、诊断(数组)、注释)。

Diagnostics 列将是一个基于 Exam_id 外键的数组。

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

ExaminationDijagnose 将是 1 , 1 , 10 1、2、10

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

那个数组是连接的,所以诊断期诊断。 “流感、高温、骨折等……

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

【问题讨论】:

  • 当结果只有一行时,您希望如何在diagnoses(array) 中获得一个数组?
  • 您需要使用“JOIN”。您使用连接并设置关系。 SELECT person.* FROM Exam JOIN Patient ON Exam.patient_id = Patient.patient_id JOIN XXXX on ....
  • @dat3450 我想我现在解释得更清楚了。
  • 所以诊断数组实际上是一个字符串,用逗号,分隔项目。我已经更新了我的答案。

标签: mysql key foreign-key-relationship


【解决方案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 = ?

【讨论】:

  • 您为我节省了很多寻找解决方案的时间。关键是 GROUP CONCAT。谢谢
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2019-01-10
      • 2020-04-15
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多