質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

0回答

398閲覧

SQL、計算したいデータがあるのですが、考え方が整理できなく困っています。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/09/10 06:08

編集2021/09/10 06:55

計算したいデータがあるのですが、考え方が整理できなく困っています。
そもそもデータ構造に問題があるかもしれませんが。

どなたかご教示お願いします。

求めたいデータとしては、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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問