これは、SQLデータベース管理者にとってはおそらく簡単な質問ですが、私はC#の人であり、必要なときにデータベースを機能させるのに十分な時間だけデータベースに手を出しています。
私が設計した新しいデータベースには、ほんの少しのデータしか含まれていません。
ビューを生成するために使用されるクエリが必要ですが、INNERとLEFTの結合をいつどのように使用するかを理解できないようです。
APacket
には複数のRequest
エントリ(1人が5つの異なるパーツを要求)をRequest
含めることができ、各エントリには異なるAction
エントリ(保留、キャンセル、特別注文、完了など)を含めることができます。
次のデータテーブルを生成するクエリを作成したいと思います。
SELECT
P.EmpID AS Requestor, P.DateStamp AS Submitted,
T.Description AS RequestType, L.Description AS Line, R.PartNo, R.Workorder, R.Qty,
RT.Description AS ReasonType, S.Description AS Status, A.EmpID AS Stator, A.DateStamp AS Stated, R.MTF
FROM Packet AS P
LEFT OUTER JOIN Request AS R ON (R.PacketID=P.ID)
LEFT OUTER JOIN Action AS A ON (A.RequestID=R.ID)
LEFT OUTER JOIN RequestType AS T ON (R.RequestTypeID=T.ID)
LEFT OUTER JOIN Line AS L ON (R.LineID=L.ID)
LEFT OUTER JOIN ReasonType AS RT ON (R.ReasonTypeID=RT.ID)
LEFT OUTER JOIN Status AS S ON (A.StatusID=S.ID)
Status
これは5行を返しますが、、、、Stator
およびのNULLエントリがいくつかありますStated
。
だから、私はこれをINNERJOINで書いてみました:
SELECT
P.EmpID AS Requestor, P.DateStamp AS Submitted,
T.Description AS RequestType, L.Description AS Line, R.PartNo, R.Workorder, R.Qty,
RT.Description AS ReasonType, S.Description AS Status, A.EmpID AS Stator, A.DateStamp AS Stated, R.MTF
FROM Packet AS P
INNER JOIN Request AS R ON (R.PacketID=P.ID)
INNER JOIN Action AS A ON (A.RequestID=R.ID)
INNER JOIN RequestType AS T ON (R.RequestTypeID=T.ID)
INNER JOIN Line AS L ON (R.LineID=L.ID)
INNER JOIN ReasonType AS RT ON (R.ReasonTypeID=RT.ID)
INNER JOIN Status AS S ON (A.StatusID=S.ID)
NULLエントリはなくなりましたが、返される行は3行だけです。
どのバージョンを使用すべきかをどのように知ることができますか?...または、LEFT結合とINNER結合を組み合わせて使用する必要がありますか?