이것은 아마도 SQL 데이터베이스 관리자 인 사람에게는 간단한 질문 일 뿐이지 만 필자는 필요할 때 데이터베이스를 충분히 오랫동안 사용할 수있게하는 C# 사람입니다.INNER와 왼쪽 조인에 대한 조언
데이터가 거의없는 새로운 데이터베이스가 있습니다.
내보기를 생성하는 데 사용할 쿼리가 필요하지만 LEFT 조인을 사용하는 방법/방법을 이해할 수없는 것 같습니다.
Packet
Request
항목을 (한 사람이 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)
이 5 개 행을 반환합니다,하지만 몇 NULL 항목이 Status
, Stator
및 Stated
거기에있다 .
그래서, 가입 내부로이 글을 쓰는 시도 :
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 조인을 함께 사용해야합니까?
시작이 한 번 봐 : 결과는 당신이 원하는/무엇이 필요합니까. 어떤 조치가 취해 졌는지에 관계없이 모든 요청을 원한다면 요청 (또는 요청)에서 왼쪽 또는 오른쪽으로 참여하십시오. 당신이 속한 행동을 취한 요청 만 원하신다면 어쩌면 당신은 reasonType에서 Request.ReasonTypeID가 null 인 Request에 LEFT 조인을 원할 경우에는 절대 사용되지 않은 모든 Reason 유형을 원할 것입니다. – xQbert
팁 : 일반적인 실수는 쿼리를 중단시키는 OUTER JOIN 뒤에 WHERE 절을 추가하는 것입니다. 예를 들어,'Packet'과'Request' 사이에'LEFT OUTER JOIN'이 있고'Request'에서'PartNo'를 참조하는'WHERE'를 추가하면'NULL' 값이나'JOIN'을 허용해야합니다 'OUTER'에서 'INNER'로 효과적으로 변경됩니다. 'ON' 절의'PartNo' 테스트는 "올바르게"작동합니다. – HABO