如何从多个表中收集信息

时间:2017-09-08 09:40:49

标签: sql

我是SQL脚本的新手,非常感谢以下任何帮助;

我需要从各种不同的表中收集信息。我通过运行以下脚本找到了所需的信息。

SELECT [immunisation_id]
,[patient_id]
,[course_id]
,[date_due]
,[date_given]
,[result]
,[comments]
FROM [Cohort].[dbo].[immunisations]

SELECT [course_id]
,[description]
FROM [Cohort].[dbo].[courses]

SELECT [patient_id]
,[title_id]
,[first_name]
,[last_name]
,[dob]
FROM [Cohort].[dbo].[patients]

SELECT [title_id]
,[description]
FROM [Cohort].[dbo].[titles]

SELECT [employee_id]
,[patient_id]
,[post_title_id]
,[department_id]
,[directorate_id]
FROM [Cohort].[dbo].[employees]

SELECT [post_title_id]
,[description]
 FROM [Cohort].[dbo].[post_titles]

SELECT [department_id]
,[description]
FROM [Cohort].[dbo].[departments]

我现在需要仅对仅接种过免疫接种的患者返回结果,并包括以下表格中的信息。列;

description from dbo.titles
first_name, last_name, dob from dbo.patients
description from dbo.post_titles
description from dbo.departments
description from dbo.courses
date_due, date given, result, comments from dbo.immunisations

我已经读过内部联接会这样做,但不知道如何编译脚本。

3 个答案:

答案 0 :(得分:2)

您可以从多个表中加入 -

SELECT a.description, b.description, c.description, d.first_name --(so on.. and other columns you need)
from TABLEA as a
INNER JOIN TABLEB as b
     on a.commonattribute = b.commonattribute
INNER JOIN TABLEC as c
    on a.commonattribute = c.commonattribute or b.commonattribute = c.commonatribute
--so on to all the required tables...

WHERE (some condition)
ORDER BY (some column);

所以在你的情况下,(花了一些时间来组合所有表格)

SELECT 

p.patient_id
,p.title_id
,p.first_name
,p.last_name
,p.dob

,i.immunisation_id
,i.course_id
,i.date_due
,i.date_given
,i.result
,i.comments

,c.description

,t.description

,e.employee_id
,e.post_title_id
,e.department_id
,e.directorate_id

,p_t.description

,d.description

FROM Cohort.dbo.patients p

inner join Cohort.dbo.immunisations i
ON i.patient_id = p.patient_id

inner join  Cohort.dbo.courses c
ON c.course_id = i.course_id

inner join  Cohort.dbo.titles t
ON t.title_id = p.title_id

inner join  Cohort.dbo.employees e
ON t.patient_id = p.patient_id

inner join  Cohort.dbo.post_titles p_t
ON p_t.post_title_id = e.post_title_id

inner join  Cohort.dbo.departments d
ON d.department_id = e.department_id

这应该有效:D

答案 1 :(得分:0)

首先,从要定义其余部分的表格中进行选择。在这种情况下,免疫接种

select date_due, date_given, result, comments
from dbo.immunisations i1 -- give it an alias
-- the joins will go in here
where date_given is not null -- this excludes the records where the immunisation has not yet happened

好的,现在让我们开始加入:

select i1.date_due, i1.date_given, i1.result, i1.comments,
       p2.first_name, p2.last_name, p2.dob
from dbo.immunisations i1
inner join dbo.patients p2
  on p2.patient_id = i1.patient_id -- aliases make it easier to join
where date_given is not null

不幸的是,您缺乏将员工信息加入免疫接种的方法(无论如何都是来自您提供的代码),因此您需要采用这种逻辑,找到缺失的链接并应用它。

答案 2 :(得分:0)

非常感谢您的投入。非常感谢。在阅读完所有内容并观看一些教程后,我设法弄明白了;这是有效的。我还想指出[]是针对那些不了解的少数人的微软。但是我确实认为删除它们是个好主意,因为脚本可以用作Oracle环境。

选择*

患者

加入免疫接种 在patients.patient_id = immunisations.patient_id

加入游戏 在patients.title_id = titles.title_id

加入课程 关于immunisations.course_id = courses.course_id

加入部门 在patients.patient_id = departments.department_id

加入员工 在patients.patient_id = employees.post_title_id

祝你好运

路易丝