2017-08-06 21 views
-1

ここでテーブルを結合しようとしています。そのテーブルの生徒も表示するようにTable2というテーブルを追加します。混乱しているのは、すでにこのクエリで結合が行われているため、既存のコードを破損することなく、そのTable2の生徒も表示されるように、別の結合を追加する必要があります。複数のテーブルを結合するPostgreSQL

   String selS = "select distinct stdistrict,stschool,stsidno," 
        + " sname as name,stgrade," 
        + "S.recnum as recnum, S.stldate as stldate,scsec,sctea,sccor,scgrade,scclsprd,scgrdprd," 
        + "case when P.scchangestartdate is null then C.clstart else " 
        + "P.scchangestartdate end as scchangestartdate, " 
        + "case when S.stedate is null or S.stedate<C.clstart " 
        + "then C.clstart else S.stedate end as stedate " 
        + "from stTable1 as S join schedprd as P on " 
        + "(scyear=styear and scdistrict=stdistrict and scschool=stschool " 
        + "and stsidno=scsidno and (scsec is not null and scsec<>'')) " 
        + "left outer join calendar as C on (C.clyear=S.styear and " 
        + "C.cldistrict=S.stdistrict and C.clschool=S.stschool and C.cltype='10') " 
        + "where styear=? and stdistrict=? "; 
+0

表1と表2の学生は異なりますか学生の?表1と表2の構造は同じですか? –

+0

構造体が同じtable1にはstdistrict、stschoolなどの変数が含まれています。 –

+0

データ構造と表間の関係がわからないと、どの結合がレコードの重複を引き起こしているのか分かりません。これにより、効率的にクエリを書き換えることができなくなります。 –

答えて

0

あなたでしUNION表1:また、

IDのvarablesがstTable 1にstsidnoされている私は、出力確認することができます方法はありません、表2でsidnoは、テーブル内のscsidnoはここ

コードですschedprd Table2と一緒に Common Table Expression (CTE)を入力し、クエリのTable1の代わりにCTEを参照してください。

WITH CTE 
AS 
(
SELECT * 
FROM Table1 
UNION 
SELECT * 
FROM Table2 
) 

select distinct 
stdistrict, 
stschool, 
stsidno, 
sname as name, 
stgrade, 
S.recnum as recnum, 
S.stldate as stldate, 
scsec, 
sctea, 
sccor, 
scgrade, 
scclsprd, 
scgrdprd, 
case when P.scchangestartdate is null then C.clstart else P.scchangestartdate end as scchangestartdate, 
case when S.stedate is null or S.stedate<C.clstart then C.clstart else S.stedate end as stedate 
from CTE as S 
join schedprd as P on (scyear=styear and scdistrict=stdistrict and scschool=stschool and stsidno=scsidno and (scsec is not null and scsec<>'')) 
left outer join calendar as C on (C.clyear=S.styear and C.cldistrict=S.stdistrict and C.clschool=S.stschool and C.cltype='10') 
where styear=? and stdistrict=?; 
+0

実行が遅くなっていませんか?すでにstdistrict、stschool、stsidnoなどのテーブル1の選択肢を実行しています。 –

+0

実行して見てください!実際のことを心配する、maybesではない –

関連する問題