2017-11-09 11 views
-2

これを書く方法はありますか?現在書かれている方法は、データをプルするのに時間がかかります。データの結果も、同じ情報を持つ複数の行のデータを繰り返します。助言がありますか?私は結合句を変更しようとしましたが、それはあまり役に立たなかった。クエリーを短くしてよりスムーズにしてより良い結果を得るために他に何が使えるか分かりません。このOracle SQL問合せを簡略化できますか?

select 
PT_IDENTIFIER.PT_IDENTIFIER_VALUE, 
PT_STUDY.FK_SOCRD_ID, 
patient.PTLASTNAME || ', ' || patient.PTFIRSTNAME as "Patient name", 
patient.DOB, 
PT_STUDY.SUBJECT_NUMBER, 
CR_imaging.CR_IMAGING as "CR_Imaging", 
CR_imaging.CR_IMAGING_SPEC, 
CR_IMAGING.CR_IMAGING_DT, 
CR_imaging.CR_IMG_SITE, 
CR_IMAGING.CR_IMG_SITE_SPEC, 
CR_IMAGING.CR_IMAGING_CT, 
CR_IMAGING.CR_IMAGING_CN, 
CR_IMAGING.CR_IMAGING_CM, 
CR_WORKUPPROC.CR_WORKUPPROC, 
CR_WORKUPPROC.CR_WORKUPPROC_DT, 
CR_DISEASE_HISTORY.CR_DISEASE_HISTORY, 
CR_DISEASE_HISTORY.CR_DISEASE_HISTORY_DT, 
CR_MDT.CR_MDT_DT, 
CR_MDT.CR_MDT_DIAG, 
CR_MDT.CR_MDT_PHYS, 
CR_MDT.CR_MDT_PRESENTED, 
CR_MDT.CR_MDT_HISTTYPE, 
CR_MDT.CR_MDT_STAGE, 
CR_MDT.CR_MDT_CT, 
CR_MDT.CR_MDT_CN, 
CR_MDT.CR_MDT_CM, 
CR_MDT.CR_MDT_PT, 
CR_MDT.CR_MDT_PN, 
CR_MDT.CR_MDT_PM, 
CR_MDT.CR_MDT_LOOKBACK, 
CR_MDT_PATH_REVIEW_DT, 
CR_MDT_PATH_REVIEW, 
CR_MDT_RECOM.CR_MDT_RECOM, 
CR_MDT_RECOM.CR_MDT_RECOM_SPEC, 
TUMORSITE.DIAGNOSIS_DT, 
TUMORSITE.TUMORSITE, 
TUMORSITE.TUMORSITE_SPEC, 
TUMORSITE.RECURRENCE_DT, 
TUMORSITE.RECURRENCE_DT_EST, 
TUMORSITE.METASTASIS_DT, 
TUMORSITE.METASTASIS_DT_EST, 
CR_SYSTEMIC.CR_AGENT, 
CR_SYSTEMIC.CR_AGENT_SPEC, 
CR_SYSTEMIC.CR_SYS_CYCLE, 
CR_SYSTEMIC.CR_SYS_DOSE_DAY, 
CR_SYSTEMIC.CR_SYS_DOSE_TOTAL, 
CR_SYSTEMIC.CR_SYS_START_DT, 
CR_SYSTEMIC.CR_SYS_START_DT_EST, 
CR_SYSTEMIC.CR_SYS_END_DT, 
CR_SYSTEMIC.CR_SYS_END_DT_EST, 
CR_RADIATION.CR_RAD_START_DT, 
CR_RADIATION.CR_RAD_START_DT_EST, 
CR_RADIATION.CR_RAD_END_DT, 
CR_RADIATION.CR_RAD_END_DT_EST, 
CR_RADIATION.CR_RAD_PHYS, 
CR_RADIATION.CR_RAD_DOSE, 
CR_RADIATION.CR_RAD_NOTES, 
CR_SURGERY.CR_SURGERY_DT, 
CR_SURGERY.CR_SURGERY, 
CR_SURGERY.CR_SURGEON, 
CR_SURGERY.CR_SURGERY_DT_EST, 
CR_SURGERY.CR_SURG_APPROACH, 
CR_SURGERY.CR_SURGERY_SPEC, 
CR_PATHOLOGY.CR_SURG_PT, 
CR_PATHOLOGY.CR_SURG_PN, 
CR_PATHOLOGY.CR_SURG_PM, 
CR_PATHOLOGY.CR_SURG_HISTTYPE, 
CR_PATHOLOGY.CR_SURG_TME, 
CR_PATHOLOGY.CR_SURG_TME_REASON, 
CR_PATHOLOGY.CR_SURG_TME_REASON_SPEC, 
CR_PATHOLOGY.CR_SURG_DISTAL, 
CR_PATHOLOGY.CR_SURG_MSI, 
CR_PATHOLOGY.CR_SURG_CRM, 
CR_PATHOLOGY.CR_SURG_PROX_DIST, 
FU_STATUS.FU_DT, 
FU_STATUS.FU_STATUS, 
FU_STATUS.FU_CANCERSTATUS, 
CR_LAB.CR_LAB_DT, 
CR_LAB_TUMORMARKER.CR_LAB_TUMORMARKER, 
CR_DISEASE_HISTORY.CR_FAM_HISTORY, 
CR_GENTEST.CR_GENTEST, 
CR_GENTEST.CR_GENTEST_SPEC, 
CR_GENTEST.CR_GENTEST_DT, 
CR_GENTEST.CR_GENTEST_RESULT 
from 
CR_IMAGING 
left join patient 
on CR_IMAGING.fk_SOCRD_ID=patient.SOCRD_ID 
left join PT_IDENTIFIER 
on patient.socrd_id=PT_IDENTIFIER.FK_SOCRD_ID 
left join PT_STUDY 
on patient.SOCRD_ID=PT_STUDY.FK_SOCRD_ID 
left join CR_DISEASE_HISTORY 
on CR_DISEASE_HISTORY.FK_SOCRD_ID=patient.SOCRD_ID 
left join CR_MDT 
on CR_MDT.FK_SOCRD_ID=PATIENT.SOCRD_ID 
left join CR_MDT_RECOM 
on CR_MDT.CR_MDT_ID=CR_MDT_RECOM.FK_CR_MDT_ID 
left join tumorsite 
on tumorsite.FK_SOCRD_ID=PATIENT.SOCRD_ID 
left join CR_SYSTEMIC 
on CR_SYSTEMIC.FK_SOCRD_ID=PATIENT.SOCRD_ID 
left join CR_RADIATION 
on CR_RADIATION.FK_SOCRD_ID=PATIENT.SOCRD_ID 
left join CR_SURGERY 
on CR_SURGERY.FK_SOCRD_ID=PATIENT.SOCRD_ID 
LEFT JOIN FU_STATUS 
ON FU_STATUS.FK_SOCRD_ID=PATIENT.SOCRD_ID 
LEFT JOIN CR_LAB 
ON CR_LAB.FK_SOCRD_ID=PATIENT.SOCRD_ID 
LEFT JOIN CR_LAB_TUMORMARKER 
ON CR_LAB_TUMORMARKER.FK_CR_LAB_ID=CR_LAB.CR_LAB_ID 
left join CR_PATHOLOGY 
on CR_PATHOLOGY.FK_CR_SURGERY_ID=CR_SURGERY.CR_SURGERY_ID, 
cr_workupproc CR_WORKUPPROC 
where cr_workupproc.FK_SOCRD_ID=patient.SOCRD_ID 
and CR_DISEASE_HISTORY.FK_SOCRD_ID=patient.SOCRD_ID 
and PT_STUDY=3 
GROUP BY PT_STUDY.SUBJECT_NUMBER, 
patient.PTLASTNAME, patient.PTFIRSTNAME, 
CR_imaging.CR_IMAGING, 
CR_IMAGING.CR_IMAGING_DT, patient.DOB, 
CR_imaging.CR_IMG_SITE, 
CR_IMAGING.CR_IMG_SITE_SPEC, 
CR_imaging.CR_IMAGING_SPEC, 
CR_IMAGING.CR_IMAGING_CT, 
CR_IMAGING.CR_IMAGING_CN, 
CR_IMAGING.CR_IMAGING_CM, 
CR_WORKUPPROC.CR_WORKUPPROC, 
CR_WORKUPPROC.CR_WORKUPPROC_DT, 
CR_DISEASE_HISTORY.CR_DISEASE_HISTORY, 
CR_DISEASE_HISTORY.CR_DISEASE_HISTORY_DT, 
CR_MDT_RECOM.CR_MDT_RECOM, 
CR_MDT.CR_MDT_DT, 
CR_MDT.CR_MDT_PHYS, 
CR_MDT.CR_MDT_PRESENTED, 
CR_MDT.CR_MDT_HISTTYPE, 
CR_MDT.CR_MDT_STAGE, 
CR_MDT.CR_MDT_CT, 
CR_MDT.CR_MDT_CN, 
CR_MDT.CR_MDT_CM, 
CR_MDT.CR_MDT_LOOKBACK, 
CR_MDT.CR_MDT_PT, 
CR_MDT.CR_MDT_PN, 
CR_MDT.CR_MDT_PM, 
CR_MDT_PATH_REVIEW_DT, 
CR_MDT_PATH_REVIEW, 
TUMORSITE.TUMORSITE, 
TUMORSITE.TUMORSITE_SPEC, 
TUMORSITE.RECURRENCE_DT, 
TUMORSITE.RECURRENCE_DT_EST, 
TUMORSITE.METASTASIS_DT, 
TUMORSITE.METASTASIS_DT_EST, 
CR_SYSTEMIC.CR_AGENT, 
CR_SYSTEMIC.CR_AGENT_SPEC, 
CR_SYSTEMIC.CR_SYS_CYCLE, 
CR_SYSTEMIC.CR_SYS_DOSE_DAY, 
CR_SYSTEMIC.CR_SYS_DOSE_TOTAL, 
CR_SYSTEMIC.CR_SYS_START_DT, 
CR_SYSTEMIC.CR_SYS_START_DT_EST, 
CR_SYSTEMIC.CR_SYS_END_DT, 
CR_SYSTEMIC.CR_SYS_END_DT_EST, 
CR_RADIATION.CR_RAD_START_DT, 
CR_RADIATION.CR_RAD_START_DT_EST, 
CR_RADIATION.CR_RAD_END_DT, 
CR_RADIATION.CR_RAD_END_DT_EST, 
CR_RADIATION.CR_RAD_PHYS, 
CR_RADIATION.CR_RAD_DOSE, 
CR_RADIATION.CR_RAD_NOTES, 
CR_SURGERY.CR_SURGERY_DT, 
CR_SURGERY.CR_SURGERY, 
CR_SURGERY.CR_SURGEON, 
CR_SURGERY.CR_SURGERY_DT_EST, 
CR_SURGERY.CR_SURG_APPROACH, 
CR_PATHOLOGY.CR_SURG_PT, 
CR_PATHOLOGY.CR_SURG_PN, 
CR_PATHOLOGY.CR_SURG_PM, 
CR_PATHOLOGY.CR_SURG_HISTTYPE, 
CR_PATHOLOGY.CR_SURG_TME, 
CR_PATHOLOGY.CR_SURG_TME_REASON, 
CR_PATHOLOGY.CR_SURG_TME_REASON_SPEC, 
CR_PATHOLOGY.CR_SURG_DISTAL, 
CR_PATHOLOGY.CR_SURG_MSI, 
CR_PATHOLOGY.CR_SURG_CRM, 
CR_PATHOLOGY.CR_SURG_PROX_DIST, 
PT_STUDY.FK_SOCRD_ID, 
CR_MDT.CR_MDT_DIAG, 
FU_STATUS.FU_DT, 
FU_STATUS.FU_STATUS, 
FU_STATUS.FU_CANCERSTATUS, 
PT_IDENTIFIER_VALUE, 
CR_MDT_RECOM.CR_MDT_RECOM_SPEC, 
TUMORSITE.DIAGNOSIS_DT, 
CR_LAB.CR_LAB_DT, 
CR_LAB_TUMORMARKER.CR_LAB_TUMORMARKER, 
CR_SURGERY.CR_SURGERY_SPEC 
+0

集計関数を使用していないので、 'group by 'は役に立たない。あなたはそれを単に削除し、選択リストで 'distinct'を使用することができます –

+0

返事をありがとう。私はPTFIRSTNAMEとPTLASTNAMEをクエリの実行時に表示する方法でグループを使用しないとエラーになります。私はDISTINCTを試し、クエリが結果を生成する方法を減らすかどうかを見てみましょう。ありがとう! –

答えて

0

あなたのテーブルとデータについて詳しく知りません。

おそらくあなたの参加方法を混在させない(だけ読みやすくするためであれば)、より良いので、私は、内側が

inner join cr_workupproc on cr_workupproc.FK_SOCRD_ID=patient.SOCRD_ID 

とCR_DISEASE_HISTORY.FK_SOCRD_ID

クエリであなただけのフィルタに参加変換したい。その

and PT_STUDY=3 

でも、pt_studyはテーブルのようであるか、これも一部のテーブルの列ですか?そうであれば、テーブル修飾子を使ってどこにあるかを明確にする方が良いでしょう。

これがcr_imagingテーブルのカラムでない場合は、多くのフル・テーブル・スキャンを実行している可能性があるため、おそらくテーブルの順序を確認する必要があります。

また、クエリの最適化に役立つ可能性のあることを確認するために、クエリの説明計画を取得する必要があります。

+0

返事をありがとう。クエリが実行されたときに返される行の数を減らすことができるかどうかを確認するために結合を変更しましたが、同じ情報を複数行取得しています。それらはすべてテーブルです。他に何を試すことができるかわからない同じ情報を繰り返して巨大なレポートを生成しなければならないときには、本当にうまくいきます。 –

関連する問題