单个下拉列表,从2个不同的列中提取数据

时间:2013-12-18 23:18:30

标签: mysql sql

我是SQL新手所以请原谅。我正在使用phpMyAdmin v3.4和MySQL(服务器版)v5.5。 是否可以为患者提供单个下拉列表,从2个不同的列中提取数据?如下:

表:实践

SurgeryID | Doctor | Assistant

1_______________| Atkin__| Cashmore

2_______________| Obrien | Morgan

3_______________| Heron_  | Chapman

Table: BOOKING

BookingID | PatientName | DocOrAss

10001___  | Spock___________ | Atkin (DropDownListOffered)

10002__________| Scotty_____________  |  Morgan (DropDownListOffered)

10003__________|  Kirk_______________|    Heron (DropDownListOffered)

患者只属于一个特定的手术(SurgeryID,即PK),并且必须能够(从下拉列表中)选择医生(独特)或医生助理(独特),但不能同时选择只有那一次手术,即患者不应该能够看到其他手术医生的其他医生和助理。我知道构建表格可能更常见,以便Doctor和Assistant在同一列中,但我想了解是否可以查看2个不同的列,就好像它们是一个。 / p>

我想简单地实现这个,作为一个永久表,可能通过某种复合键而不是在代码中操作。如果这不可能,例如也许没有任何功能可以帮助做到这一点,或者表结构被认为是糟糕的设计,然后我会继续 - 任何关于重新设计的建议都是受欢迎的。

感谢您的期待。

1 个答案:

答案 0 :(得分:1)

我认为你要做的事情可以使用类似于下面的SQL来完成,它将表与自己联合起来,并为2个不同的列分配相同的别名。

select
    doctor as DocOrAss
from
    practice
where
    surgeryid = 1
union
select
    assistant as DocOrAss
from
    practice
where
    surgeryid = 1

结果应与

类似
DocOrAss
--------
Atkin
Cashmore

然而,设计感觉不太对劲。

您可能遇到的问题可能是当您选择DocOrAss时,您如何知道他们是医生还是助理?你怎么能容易地找出他们来自哪个手术?

练习表设计的问题在于您的表似乎有3个职责

  1. 列出医生
  2. 列出手术的
  3. 列出助理
  4. 对于一张桌子来说这有点多,如果手术可以有多个医生,则会违反1NF原则。将它分解一点可能会很好,甚至可能分成3个表。

    或者,如果您要做的就是列出特定手术中的所有医生(假设助手实际上只是其他医生)那么可能更好但仍然简单的设计可能是创建一个名为Doctors的表(DoctorId [Pk] ,姓名,外科手术。然后你可以选择一个特定的外科医生的所有医生。

相关问题