我在MS SQL SERVER的数据库中拥有3个不同的表。
该 LAB Patientreg_ 和 Patient_master 是两个包含患者详细信息的表(两个表中的患者都不相同, LAB
Patientreg_ 是与直接在实验室中注册的患者有关的表,而 Patient_master 是关于在 门诊 或接待时 在 医院中注册的
患者 的表)和 patient_address 是包含在表中登记的患者的地址表 patient_master 。
在某些情况下,我需要所有患者的数据,包括 LAB Patientreg_ 和 Patient_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”不明确”
您可能要在这里选择联盟?
在一个视图中包含两个表数据,并且能够向第二个表添加条件。就像这样:
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
(只需用您的条件替换where 1 = 1)
使用“联合选择”:确保 两个 表上的列名称相同。如果您在另一个表中没有该字段,则可以使用AlternateFieldname As TheFieldNameINeed
“例如”Null As religion
编辑:您可以Union
用来获取所有不同的值或Union All
获取两个表的所有值。
假设我有两个表和。包含和列。有两列和,它们链接回的列。
问题内容: 如何将一个表中的一行连接到具有另一表上给定列的MAX值的行? 例如,我有一张桌子和一张桌子。我想以表中该拍卖的最高出价(即列AND的最高值,其中= )加入拍卖表。 问题答案: 这很烦人。您最好在每个获胜的Auction_bid中都带有一个“优胜者”标志。 请注意,竞标价为零的竞标价将根本不会列出,而有关联的竞标(会发生这种情况)将为每个并列竞标出现一次。
问题内容: 我有一个带有历史记录的表,该表由主表中的多个触发器发布在该表中。我想在历史记录表上创建一条select语句,在该表中,我的每条记录都由其先前的记录(由相同的LineID和最高的ActionDate标识)进行了联接,因此我可以提取这两者之间的差异。 我尝试了此操作,但是(My)SQL不允许引用JOINED子选择中的第一个“ FROM”表:where子句中的未知列h1.LineID 我怎样
问题内容: 在MySQL中,我有两个不同的数据库-我们姑且称之为 一个 和 乙 。 是否可以在数据库 A 中的表与数据库 B中 的表之间执行 联接 ? 问题答案: 是的,假设该帐户具有适当的权限,则可以使用: 您只需要在表引用前面加上它所驻留的数据库的名称即可。
问题内容: 有没有办法告诉Hibernate在使用to_char将列连接到另一个表或将NUMBER转换为VARCHAR时将其包装?我遇到的情况是,我的一个表包含一个类型为VARCHAR的通用键列,该列存储另一个表的ID(即Number)。当Hibernate执行它生成的SQL时,我收到一个SQL异常,该SQL使用’=’比较两列。 谢谢… PS:我知道这不是理想的选择,但是我坚持使用模式,因此必须对
问题内容: 该查询工作正常。但是问题是,产品表和类别表都具有名为“ name”和“ id”的字段。因此,当我获取此查询的结果时,它只给我一个名称和一个ID,但同时又需要ID和名称。 我如何做到这一点而不必重命名字段?是否可以使用自定义名称(例如product_name和category_name)返回? 问题答案: 您可以将别名添加到字段: