2017-09-08 13 views
1

私は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

の部署 に参加します。どのDBMS製品を使用していますか –

+0

@a_horse_with_no_name SQLは有効です。すべてのテーブルが接続されています。詳細については私の答えをチェックしてください。 –

+0

@pro_cheats:いいえ。 '['と ']'は** standard ** SQLの識別子では無効です - これは 'sql'タグが参照するものです。特定の方言(データベース製品)では有効ですが、標準SQLでは有効ではありません。 –

答えて

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

+0

@LJEANこの回答を一度チェックして回答があればそれを答えることができますか? –

+0

こんにちは、ありがとうございました。残念ながら、それは動作しませんでした。私は次のものも同様に働くかもしれないと思ったが、しなかった。 を[コホート]の[immunisation_id] 、[date_due] 、[date_given] 、[結果] 、[コメント] を選択します。[DBO]。[免疫] インナー[コホート] JOIN [DBO ] [科目名] INNER JOIN [コホート]。[患者] ON [first_name] = [first_name] 、[last_name] = [last_name]、[dob] = [説明] [DOB] インナー[コホート] JOIN [DBO]。[タイトル] [title_idを〕ON = [説明] INNER JOIN [コホート]。[DBO]。[部門] = [DEPARTMENT_ID] ON [説明] – LJEAN

+0

親切にあなたの参加条項をチェックしてください。例えば、 'course_id = description'は間違っています。両方の列が同じデータ型である必要があります。それらの列を同じにする必要があり、論理的にはほとんど同じ値を持つ必要があります。 –

0

まず、残りのテーブルを定義するテーブルから選択します。この場合、immunusations

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 

OK]をクリックして、今の接合始めましょう:

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 

残念ながら、あなたはそう、(とにかく、あなたの提供されたコードから)予防接種への従業員の情報を結合する方法が欠けていますあなたはこの論理を取って、欠けているリンクを見つけて、それを適用する必要があります。

+0

ありがとうございます。スクリプトにエイリアスを使用して、簡単に参加できるようになりました。 – LJEAN

0

入力いただきありがとうございます。それは非常に感謝していた。それらをすべて読んで、いくつかのチュートリアルを見て、私はそれを理解することができた。これがうまくいきました。私は、[]が分かっていない数少ない人に特化したマイクロソフトであることを指摘したかったのです。しかし、スクリプトはOracle環境などで使用できるため、削除することをお勧めしました。

はpatients.patient_id = immunisations.patient_id

上 がpatients.title_id = titles.title_id

上 がコース に参加するタイトルを参加予防接種に参加した患者

から*

を選択しますimmunisations.course_id = courses.course_id

はあなたの例では、無効な標準のSQLでpatients.patient_id = departments.department_id

従業員を参加 上patients.patient_id = employees.post_title_id

敬具

ルイーズ

関連する問題