2013-12-18 67 views
0

我是SQL新手,請原諒。我使用的是phpMyAdmin v3.4和MySQL(服務器版)v5.5。 是否可以請患者提供一個從2個不同列中抽取數據的下拉列表?具體如下:從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個不同的列視爲一個列。

我想實現這一點,作爲一個永久表可能通過某種組合鍵而不是在代碼中操作。如果這是不可能的,例如也許沒有功能來幫助做到這一點,或者桌子結構被認爲是糟糕的設計,那麼我會繼續前進 - 任何有關重新設計的建議都是值得歡迎的。

感謝您的期待。

回答

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. 上市助理

這是一個有點如果一個手術可以有一個以上的醫生,那麼對於一張桌子來說就很重要,並打破了原則。它可能會很好地打破這一點,甚至可能分成3個表格。

或者如果你所要做的只是列出所有在特定手術中的醫生(假設助理實際上只是其他醫生),那麼也許一個更好,但仍然簡單的設計可能是創建一個名爲Doctors(DoctorId [Pk ],Name,SurgeryId)。然後,您可以爲特定手術ID的所有醫生做出選擇。

相關問題