【发布时间】:2014-09-16 04:22:33
【问题描述】:
大家好,我在 MS SQL SERVER 的数据库中有 3 个不同的表。
- LAB_patientreg
- 患者主控
- 患者地址
LAB_patientreg 和 patient_master 是两个包含患者详细信息的表(两个表中的患者不同,LAB_patientreg 是关于患者的表谁直接在实验室注册,patient_master 是关于在接待处以 out patient 或 in patient 的身份注册到医院的病人)和 patient_address 是包含在 patient_master 表中注册的患者地址的表。
在某些情况下,我需要所有患者的数据,包括 LAB_patientreg 和 patient_master 以及 patient_address。我的目标是创建一个视图,其中包含此表中的所有值(即,如果 patient_master 有 50 行,LAB_patientreg 有 32 行,则结果视图应为 82 行)而且列的数量和类型仅限于 LAB_patientreg 但它不起作用,是否可以像我说的那样创建视图?如果不是,我应该怎么做才能获得这样的观点?提前感谢您帮助我。
表结构如下,
患者主控
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)
);
患者地址
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: Ambiguous column name 'pid'"
【问题讨论】:
标签: java sql sql-server database hibernate