Mysql 通过3个内部联接从1个表中多次选择同一列

Mysql 通过3个内部联接从1个表中多次选择同一列,mysql,Mysql,在医学数据库上工作。 我们有处方表、诊断表和项目表(每个项目,而不仅仅是药物) 在诊断表中,有一整套称为med#的列(目前为13列,可能会增加),其中列出了患者开出的所有各种药物。药物的名称存储在items表中(因为是多语言的),为了检索药物1~13的名称,我使用下面的查询 它是有效的,但我想它可能不是很有效。 有没有更好的方法重写这个? 或者甚至重新设计数据库? 这仍处于早期阶段,DB设计尚未锁定 select d.name_en, e.name_en from diag a

在医学数据库上工作。 我们有处方表、诊断表和项目表(每个项目,而不仅仅是药物)

在诊断表中,有一整套称为med#的列(目前为13列,可能会增加),其中列出了患者开出的所有各种药物。药物的名称存储在items表中(因为是多语言的),为了检索药物1~13的名称,我使用下面的查询

它是有效的,但我想它可能不是很有效。 有没有更好的方法重写这个? 或者甚至重新设计数据库? 这仍处于早期阶段,DB设计尚未锁定

select d.name_en, e.name_en
from
    diag a
    inner join
pres c
    on a.med1 = c.id
    inner join
pres b
    on a.med2 = b.id
    inner join
items d
    on b.id = d.id
    inner join
items e
    on c.id = e.id
where a.id = 1

您应该有一个保存患者信息的表和另一个保存药物信息的表。这将允许药物的数量增长,而无需重新设计治疗表


在药物信息表中,应该有一列引用项目表中的项目,还有一列引用患者信息表中的患者。这将是您的药物信息表的主键。

如果列数可以增加,则您的设计存在问题。诊断表是否保存患者信息?@草莓,我的意思是它可能会比我们现在的增加,但在设计完成后将被锁定。@Andrew否。有一个单独的患者数据库也加入到诊断表中。更有可能的是,考虑到一种药物可以给许多患者开,一个患者可以给许多药物开,您需要一张患者表,一张药物表,还有一张表,上面有一个和另一个的关系,包括剂量。是的。这就是我的建议。根据第47个问题,项目表包含药物。我想我可以更明确地将“药物信息”称为“患者药物信息”。此外,我建议的列不是表中唯一的列。一定要包括剂量等信息。我不想花太多时间来设计这个表,因为我不知道47森医院数据库的要求。我对它进行了更改,现在有了一个病人表、一个诊断表、一个药物表和一个称为处方的中间/枢轴表,将诊断和药物连接在一起。因此处方将有这些列,id,diag_id,med_id,dose,每种药物占据一个新行,而不是另一列。我原以为只有一个诊断行和药物作为列存储会更整洁,但这可能更容易管理?在这方面我还是个新手。一个规范化的设计会有一个表,每个药物都有一个单独的行。不要将数据存储与数据检索和显示混淆。