【问题标题】:Getting the data out of one-many relation ship from same table从同一个表中获取一对多关系中的数据
【发布时间】:2010-08-18 02:33:30
【问题描述】:

我有一个表,它包含 4 列:

身份证|医院|医生|病人 1 A D1 P11 2 B D6 P61 3 A D2 P21 4 A D1 P12 5 B D7 P71 6 B D6 P62 7 B D6 P63

医生是医院独有的。他们不在其他医院工作。病人对医生来说是独一无二的。他们不去看任何其他医生。每家医院都有多名医生。

如果您观察到每个医生有多个患者。

现在的问题是,我怎样才能得到与每个医生相关的“只有一个病人”?它可以是记录中的任何患者。

我期待看到这样的事情:

医院医生病人 A D1 P11 A D2 P21 B D6 P61 B D7 P71

如何获取上表中的 id,例如:

id 医院 医生 病人 1 A D1 P11 3 A D2 P21 2 B D6 P61 5 B D7 P71

提前致谢

【问题讨论】:

    标签: sql


    【解决方案1】:

    像这样:

    SELECT Hospital, Doctor, MAX(Patient)
    FROM table
    GROUP BY Hospital, Doctor
    ORDER BY Hospital, Doctor
    

    既然你说你不关心哪个病人,我只用了MAX,但你也可以用MIN或其他一些分组函数。

    【讨论】:

    • 您应该也添加 ORDER BY Hospital, Doctor。
    • 非常感谢 Eric。回答非常直接,非常有用。
    • @Giridhar,如果答案是您要找的,请接受它作为已回答。
    • 有什么办法可以归功于 Eric,我是这个网站的新手。一些积分系统。
    • @Giridhar - 正如 FerranB 所说,接受答案,Eric 将获得 15 声望。
    【解决方案2】:

    我不禁要问,这不应该是三张桌子,而不是一张。当然,Hospital 和 Doctor 之间存在 1:m 的关系,Doctor 和 Patient 之间也存在 1:m 的关系。每个实体必须具有其他属性。为什么所有这些都在一个表中?我会把它标准化。

    我不明白 B 医院 D6 应该首选 P61 或 P63 的要求,但我相信你会。

    【讨论】:

      【解决方案3】:

      根据上表,Eric 已经回答了这个问题。

      如果您可以控制数据库设计:

      如果医生只能在一家医院工作,那么 Doctor 表应该有一个 HospitalId。 如果一个病人真的只能有一个医生,那么 Patient 表应该有一个 DoctorId。

      病人>>医生>>医院。

      这将完全消除此表,它看起来支持医生、医院和患者之间的多对多关系,您说这是不可能的。但是,您可能希望保持灵活性。

      【讨论】:

        猜你喜欢
        • 2019-01-12
        • 1970-01-01
        • 1970-01-01
        • 2017-07-16
        • 2019-01-06
        • 2019-01-12
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        相关资源
        最近更新 更多