在Microsoft sql server中连接/附加不同的表

Hai我在MS SQL SERVER的数据库中有3个不同的表。

  1. LAB_patientreg
  2. patient_master
  3. patient_address

LAB_patientregpatient_master是包含患者详细信息的两个表(两个表中的患者不同, LAB_patientreg是关于直接在实验室注册的患者的表,而患者_master是关于在患者患者在接待处登记到医院的患者 )和patient_address是包含在表patient_master中登记的患者的地址的表。

在某些情况下,我需要所有患者的数据,包括LAB_patientregpatient_master以及patient_address 。 我的目的是创建一个视图,其中包含此表中的所有值(即,如果patient_master有50行, LAB_patientreg有32行,结果视图应该是82行),并且列的数量和类型仅限于LAB_patientreg的数量和类型但它不起作用,是否有可能像我说的那样创建一个视图? 如果不是我该怎么做才能获得这样的观点? 在此先感谢帮助我。

表的结构如下,

patient_master

CREATE TABLE [dbo].[patient_master]( [pid] [int] IDENTITY(1,1) NOT NULL, [date_created] [date] NULL, [title] [varchar](25) NULL, [fname] [varchar](255) NULL, [mname] [varchar](255) NULL, [lname] [varchar](255) NULL, [addr_id] [int] NULL, [sex] [char](1) NULL, [dob] [date] NULL, [dobType] [tinyint] NULL, [marital_status] [int] NULL, [religion] [int] NULL, [caste] [int] NULL, [aadhar_no] [varchar](16) NULL, [mother_name] [varchar](100) NULL, [guardian_name] [varchar](100) NULL, [guardian_rltn] [varchar](100) NULL, [allow_sms] [varchar](10) NULL, [allow_email] [varchar](10) NULL, [occupation] [int] NULL, [monthly_income] [int] NULL, [financial_review_date] [datetime] NULL, [race] [int] NULL, [language] [int] NULL, [referrer] [varchar](100) NULL, [referrer_id] [varchar](100) NULL, [interpretter] [varchar](100) NULL, [interpretter_id] [varchar](100) NULL, [deceased_date] [date] NULL, [deceased_reason] [varchar](255) NULL, [created_by] [varchar](100) NULL, [changed_by] [varchar](100) NULL, [date_changed] [datetime] NULL, [voided] [tinyint] NULL, [voided_by] [varchar](100) NULL, [date_voided] [datetime] NULL, [void_reason] [varchar](255) NULL, [block] [tinyint] NULL, [aliasname] [varchar](50) NULL, [confidential] [int] NULL, [hospno] [char](8) NULL, PRIMARY KEY(pid) ); 

patient_address

 CREATE TABLE [dbo].[patient_address]( [pres_house_no] [varchar](25) NULL, [pres_city] [varchar](50) NULL, [pres_street] [varchar](50) NULL, [pres_district] [int] NULL, [pres_pincode] [varchar](10) NULL, [perm_house_no] [varchar](25) NULL, [perm_city] [varchar](50) NULL, [perm_street] [varchar](50) NULL, [perm_district] [int] NULL, [perm_pincode] [varchar](10) NULL, [home_phone] [varchar](11) NULL, [mobile_phone] [varchar](11) NULL, [other_phone] [varchar](11) NULL, [work_phone] [varchar](11) NULL, [email] [varchar](255) NULL, [emerg_cntct] [varchar](50) NULL, [emerg_cntct_rltn] [varchar](50) NULL, [emerg_cntct_num] [varchar](11) NULL, [pres_place] [varchar](255) NULL, [perm_place] [varchar](255) NULL, [addr_id] [int] IDENTITY(1,1) NOT NULL, [pid] [int] NULL, [active] [char](1) NULL, [phone_type] [varchar](4) NULL, , PRIMARY KEY(addr_id) ); 

LAB_patientreg

 CREATE TABLE [dbo].[LAB_patientreg]( [id] [int] IDENTITY(1,1) NOT NULL, [patientid] [varchar](15) NOT NULL, [title] [varchar](15) NULL, [fname] [varchar](50) NULL, [mname] [varchar](50) NULL, [lname] [varchar](50) NULL, [dob] [smalldatetime] NULL, [gender] [char](2) NULL, [mstatus] [varchar](15) NULL, [idtype] [varchar](15) NULL, [idno] [varchar](25) NULL, [mtongue] [varchar](35) NULL, [address] [varchar](300) NULL, [phtype] [varchar](15) NULL, [phno] [varchar](20) NULL, [emailid] [varchar](50) NULL, [smsstatus] [int] NULL, [mailstatus] [int] NULL, [status] [int] NULL, [regcenter] [varchar](30) NULL, [regdate] [smalldatetime] NULL, PRIMARY KEY(patientid) ); 

我曾尝试过以下方法

 Select patientid,title, fname, mname, lname, NULL As religion from LAB_patientreg WHERE 1=1 Union All Select pid,title, fname, mname, lname, religion from patient INNER JOIN patient_address ON patient.pid = patient_address.pid WHERE 1=1 

执行此操作时,出现错误,如错误代码209,SQL状态S1000:不明确的列名称’pid’“

你可能想在这里选择Union?

在一个视图中包含表数据,以及能够向第二个表添加条件。 它会是这样的:

 Select title, fname, mname, lname, NULL As religion, patientid As pid from dbo.LAB_patientreg WHERE 1=1 UNION Select title, fname, mname, lname, religion, convert(varchar, patient_master.pid) As pid from dbo.patient_master INNER JOIN patient_address ON patient_master.pid = patient_address.pid WHERE 1=1 

(只需用你的条件替换1 = 1的地方)

使用Union Select:确保两个表上都有相同的列名。 如果你没有在另一个表中的字段,你可以使用AlternateFieldname As TheFieldNameINeed例如字段Null As religion

编辑:您可以使用Union获取所有不同的值,也可以使用Union Union All获取两个表的所有值。