2013-02-23 46 views
1

我有一张名为Doctor的表格。从2个不同的表格中选择值

医生表由4个字段组成。 DoctorID,DoctorName, DoctorAddress, DoctorSpeciality

我有另一个名为PatientData的表。它有4个领域。 PatientId, PatientName, PatientTelephone, DoctorID

我需要编写一个SQL来显示下列字段;

PatientID, PatientName, DoctorName, DoctorSpeciality 

1)我想,我会在这里使用的INNER JOIN,但我不知道怎么写了这个场景。一个outer join也会工作,我猜,但我是Joins新。有人可以帮我吗?

2.)我可以为我在上面创建的SQL声明创建一个VIEW吗?

+1

视图您可能需要重新考虑您的设计,以便在患者和医生之间建立多对多的关系。 – 2013-02-23 21:55:23

+0

这是丹的好建议。考虑到这一点,医生可以有很多患者,患者可以有很多医生,医生可以有多种专科,患者可以有多名具有相同专科的医生或多名具有多种专科的医生。他们都应该使用关系表来加入他们自己的数据库表中。当您查询患者时,您可以查看关系表并抓住他/她的所有医生,然后抓住该医生的特色,等等。 – 2013-02-23 23:24:52

+0

我的示例中有一点极端,以帮助显示场景,但如果数据是1-1,或者您只有几个静态值,则可以轻松地将特色作为医生的属性存储。 – 2013-02-23 23:48:07

回答

2

这样的事情应该会使用常规INNER JOIN - 这将返回从医生表中的所有记录与在PatientData表匹配的记录:

SELECT PD.PatientId, PD.PatientName, D.DoctorName, D.DoctorSpecialty 
FROM Doctor D 
    INNER JOIN PatientData PD ON D.DoctorId = PD.DoctorId 

如果你想从一个返回的所有数据其他表,请使用OUTER JOIN(我更喜欢LEFT JOINs)。

这里的视觉表现不错的文章的联接:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

是的,你可以创建一个视图,如果你想 - 取决于你的需要。这样的事情应该是接近:

CREATE VIEW DoctorPatients AS 
SELECT PD.PatientId, PD.PatientName, D.DoctorName, D.DoctorSpecialty 
FROM Doctor D 
    INNER JOIN PatientData PD ON D.DoctorId = PD.DoctorId 

SQL Server视图:http://msdn.microsoft.com/en-us/library/ms187956.aspx

1

这是一个简单的加入

SELECT p.PatientID, p.PatientName, d.DoctorName, d.DoctorSpeciality 
FROM PatientData p JOIN Doctor d on d.DoctorID = p.PatientID 

当然,你可以创建这个

CREATE VIEW [dbo].[PatientAndDoctor] 
    AS 
     SELECT p.PatientID, p.PatientName, d.DoctorName, d.DoctorSpeciality 
     FROM PatientData p JOIN Doctor d on d.DoctorID = p.PatientID 
相关问题