Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL连接表和显示数据_Sql_Join - Fatal编程技术网

SQL连接表和显示数据

SQL连接表和显示数据,sql,join,Sql,Join,我有3张桌子与我遇到麻烦的医院有关 入院包括患者、入院日期、出院日期和病房。 医生医生姓名、名字和病房。 病房病房ID、姓名和顾问(医生ID) 我已经能够做很多教程要求我做的事情,但是我找不到任何关于如何做以下事情的指导或答案: 我希望找到患者未使用的医生姓氏,并显示患者使用的姓氏。我猜加入到医生和病房的表格中,并以某种方式加入到入院表格中,以表明530医生没有被任何患者使用 然后,我应该有一个和,以显示与病房表中的顾问对应的医生的姓氏 为了找到没有治疗过任何患者的医生的详细信息,我将加入“病

我有3张桌子与我遇到麻烦的医院有关

入院包括患者、入院日期、出院日期和病房。
医生医生姓名、名字和病房。
病房病房ID、姓名和顾问(医生ID)

我已经能够做很多教程要求我做的事情,但是我找不到任何关于如何做以下事情的指导或答案:

我希望找到患者未使用的医生姓氏,并显示患者使用的姓氏。我猜加入到医生和病房的表格中,并以某种方式加入到入院表格中,以表明530医生没有被任何患者使用

然后,我应该有一个和,以显示与病房表中的顾问对应的医生的姓氏

为了找到没有治疗过任何患者的医生的详细信息,我将加入“病房医生”并显示那些不在“顾问”栏中的医生的详细信息。我理解这个理论,只是不知道如何在SQL中正确地计算出来


我欢迎任何关于答案的讨论或帮助,因为我很想了解这一步。

患者不使用的医生

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 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

一篇帖子的问题太多了。把它分解成更小的问题。