我是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
我已经读过内部联接会这样做,但不知道如何编译脚本。
答案 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
上祝你好运
路易丝