計算したいデータがあるのですが、考え方が整理できなく困っています。
そもそもデータ構造に問題があるかもしれませんが。
どなたかご教示お願いします。
求めたいデータとしては、T_Basesを基準としたマスタに関連した最大レコード数のデータを取得したい
①T_Bases -> T_Estimatesは事情があって、UNION ALLをして求めた。 ※本来はさらにここからWorkDetailsの最大数を求めたいのですが。
・Estimates
{ Id = 1, BaseId = 1, EstimateName = 'c', WorkId = 1 }
{ Id = 2, BaseId = NULL, EstimateName = 'd', WorkId = 2 }
②T_Estimates -> M_Works -> M_WorkDetailsを平坦化して最大数を求めた。
・EstimateDetails
{ Id = 0, BaseId = 1, EstimateName = 'c', WorkId = 1, WorkDetailId = 1 }
{ Id = 0, BaseId = 1, EstimateName = 'c', WorkId = 1, WorkDetailId = 2 }
{ Id = 0, BaseId = 1, EstimateName = 'd', WorkId = 2, WorkDetailId = 3 }
③ ① ②をINNER JOINしてデータ取得しようとしたが、そもそもT_EstimatesにIdがないので、INNER JOINを使えなかった。
また、T(トランザクションデータ)同士なので、M_WorkPartDetailsのIdは結合キーとして使えない気がした。
※そんなことはないかも?
↓
④求めたいデータ
EstimateDetailsにEsitmateIdのWorkDetailIdがなければId = 0のレコードを追加したい。(最大数)
・EstimateDetails
{ Id = 1, BaseId = 1, EstimateId = 1, EstimateDetailName = 'e', WorkId = 1, WorkDetailId = 1 }
{ Id = 2, BaseId = 1, EstimateId = 1, EstimateDetailName = 'f', WorkId = 1, WorkDetailId = 2 }
{ Id = 0, BaseId = 1, EstimateId = 2, WorkId = 2, WorkDetailId = 3 }
-データ-----------------------------
T_TopBases
{ Id = 1, Name = 'a' }
↑↓ 1:1の関係
T_Bases
{ Id = 1, Name = 'b' }
↑↓ 1:1の関係
T_Estimates ※BaseIdはCASCADE DELETE OFFでNULL OKにしてます
{ Id = 1, TopBaseId = 1, Name = 'c', BaseId = 1, WorkId = 1 }
{ Id = 2, TopBaseId = NULL, Name = 'd', BaseId = NULL, WorkId = 2 }
↑↓ 1:多の関係
T_EstimateDetails
{ Id = 1, Name = 'e', EstimateId = 1, WorkDetailId = 1 }
{ Id = 2, Name = 'f', EstimateId = 1, WorkDetailId = 2 }
M_Works
{ Id = 1, Name = 'A' }
{ Id = 2, Name = 'B' }
↑↓ 1:多の関係
M_WorkDetails
{ Id = 1, Name = 'C', WorkId = 1 }
{ Id = 2, Name = 'D', WorkId = 1 }
{ Id = 3, Name = 'E', WorkId = 2 }
あなたの回答
tips
プレビュー