0

問題を抱えている病院と関係のあるテーブルが 3 つあります。

http://postimage.org/image/hi2c4yrrf/

入院患者 ID、入院日、退院日、および病棟が含まれます。
Doctorid、姓、名、病棟。
病棟の病棟、名前、コンサルタント (doctorid)

チュートリアルで求められていることの多くを行うことができましたが、次の方法に関するガイダンスや回答が見つかりません。

患者が使用していない医師の姓を検索し、患者が使用している医師の姓も表示したいと考えています。私は、ドクターと病棟のテーブルに参加し、530 番ドクターがどの患者にも使用されていないことを示すために何らかの形で入院したと推測しています。

次に、病棟テーブルでコンサルタントと対応する医師の姓を表示するための AND が必要です。

患者を治療していない医師の詳細を検索するには、Doctor with Ward に参加し、コンサルタントの列にない医師の詳細を表示します。私はこの理論を理解していますが、SQL で適切に処理する方法がわかりません。

このステップを本当に理解したいので、議論や回答の助けを歓迎します.

4

1 に答える 1

0

患者に使われない医者

select distinct d.number, d.surname
from doctor d
left join ward w on w.consultant = d.number
left join admission ad on ad.ward = w.code
left join patient p on p.code = ad.patient
where p.code is null

患者に利用される医師

select distinct d.number, d.surname
from doctor d
join ward w on w.consultant = d.number
join admission ad on ad.ward = w.code
join patient p on p.code = ad.patient

スキーマ (テスト用):

select * into patient
from (
  select 'A102' [code], 'Harris' [surname], 'Lucy' [lastname] union all 
  select 'B372', 'Rossini', 'Peter' union all
  select 'B534', 'Johnson', 'Nadia' union all
  select 'B444', 'Johnson', 'Juigi' union all
  select 'S555', 'Rose', 'Jean') as p

select * into admission
from (
  select 'A102' [patient], null [admitted], NULL [discharged], 'A' [ward] union all
  select 'A102', null, NULL, 'A' union all
  select 'S555', null, NULL, 'B' union all
  select 'B444', null, NULL, 'B' union all
  select 'S555', null, NULL, 'A') as ad

select * into doctor
from (
  select 203 [number], 'Black' [surname], 'Peter' [firstname], 'A' [ward] union all
  select 574, 'Blis', 'Mavis', 'B' union all
  select 461, 'Boyne', 'Steve', 'B' union all
  select 530, 'Clark', 'Nicola', 'C' union all
  select 405, 'Mizzi', 'Nicola', 'A' union all
  select 501, 'Mount', 'Mavis', 'A') as d

select * into ward
from (
  select 'A' [code], 'Surgical' [name], 203 [consultant] union all
  select 'B', 'Paediatric', 574 union all
  select 'C', 'Medical', 530) as w
于 2013-03-17T06:04:34.823 に答える