質問: '2' ```
回答: > > 取得できた同じレコードの「旧生徒連番と旧生徒名を連結したもの」と、「新生徒連番と新生徒名を連結したもの」を比較し、違っていれば、追加/変更があったと検知したいです。 > > > 求める結果を出すには結合する必要があります。 結合する=等しいとなるので、その後の比較には意味がありません。 生徒連番で結合するなら、生徒名で比較だし、生徒名で結合するなら生徒連番という片側での比較でしょう。 取り敢えずそれは置いといて、旧クラステーブルの最新(クラス履歴番号が最大のもの)と現クラステーブルの突合について、 ``` SELECT A.クラスID, A.クラス履歴連番, A.生徒連番, A.生徒名 , B.クラスID, B.生徒連番, B.生徒名 FROM 現クラステーブル B full join ( select * from 旧クラステーブル a0 where 旧クラス履歴番号=( select max(旧クラス履歴番号) from 旧クラステーブル where クラスID=a0.クラスID ) ) A on B.クラスID=A.クラスID and B.生徒連番=A.生徒連番 ``` 全外部結合で取り出せば、削除も判断できます。(不要なら、left joinに変更して下さい) 性能を考慮した別パターン ``` SELECT A.クラスID, A.クラス履歴連番, A.生徒連番, A.生徒名 , B.クラスID, B.生徒連番, B.生徒名 FROM 現クラステーブル B full join ( select * from 旧クラステーブル a0 where (クラスID, 旧クラス履歴番号) in ( select クラスID, max(旧クラス履歴番号) from 旧クラステーブル group by クラスID ) ) A on B.クラスID=A.クラスID and B.生徒連番=A.生徒連番 ```