Joh*_*ohn 8 sql t-sql sql-server
CREATE TABLE [Users_Reg]
(
[User_ID] [int] IDENTITY (1, 1) NOT NULL CONSTRAINT User_Reg_P_KEY PRIMARY KEY,
[Name] [varchar] (50) NOT NULL,
[Type] [varchar] (50) NOT NULL /*Technician/Radiologist*/
)
CREATE Table [Study]
(
[UID] [INT] IDENTITY (1,1) NOT NULL CONSTRAINT Patient_Study_P_KEY PRIMARY KEY,
[Radiologist] [int], /*user id of Radiologist type*/
[Technician] [int], /*user id of Technician type*/
)
select * from Study
inner join Users_Reg
on Users_Reg.User_ID=Study.Radiologist
Run Code Online (Sandbox Code Playgroud)
在patient_study表中,放射科医师或技师可能有0值.我如何从查询中获得技术员姓名和放射科医生姓名.
您需要users_reg两次在表上加入以获得结果.一次是放射科医师,另一次是技术人员:
select ps.uid,
ur1.name rad_name,
ur1.type rad_type,
ur2.name tech_name,
ur2.type tech_type
from Patient_Study ps
left join Users_Reg ur1
on ur1.User_ID=ps.Radiologist
left join Users_Reg ur2
on ur2.User_ID=ps.Technician;
Run Code Online (Sandbox Code Playgroud)
请参阅SQL Fiddle with Demo.这将返回所有患者研究的放射科医师和技师名称/类型.如果要替换任何列中的null,则可以使用COALESCE类似于以下内容:
select ps.uid,
coalesce(ur1.name, '') rad_name,
coalesce(ur1.type, '') rad_type,
coalesce(ur2.name, '') tech_name,
coalesce(ur2.type, '') tech_type
from Patient_Study ps
left join Users_Reg ur1
on ur1.User_ID=ps.Radiologist
left join Users_Reg ur2
on ur2.User_ID=ps.Technician;
Run Code Online (Sandbox Code Playgroud)