2016-12-18 1 views
0

두 테이블이 서로 관련되어 있습니다. 첫 번째 테이블에는 후자의 테이블에 동일한 속성이 하나 이상 있습니다. (일대 다 관계가 있음) 따라서 후자 테이블의 행에는 기본적으로 다음 열이 포함됩니다 (PK, FK, 속성). 첫 번째 테이블의 일부 행에는 특성이 없으므로 후자의 테이블에 기록되지 않습니다.첫 번째 테이블의 모든 결과를 나열하는 두 테이블 조인

첫 번째 테이블의 모든 행을 후자의 테이블의 특성에 대한 추가 열로 나열하고 싶습니다. 내부 조인 또는 where 절을 사용할 때 속성이없는 결과를 나열 할 수 없습니다. 그러나 내가 뭘 원하는 첫 번째 테이블에서 모든 행을 나열하고 거기에 대한 속성이없는 경우 추가 열을 null로 만들고 싶습니다. 둘 이상의 특성이있는 경우이를 연결하려면 단일 열.

여기서는 코드를 공유하지 않고 처음에는 어떤 도구를 사용하고 어떤 방식으로 사용해야하는지 알 필요가 있기 때문에 추상적 인 방식으로 질문하고 있습니다. 내가 선택한 조인뿐만 아니라 ISNULL 같은 방법으로 조인과 하위 쿼리를 시도했지만 내가 뭘하고 있었는지 확실하지 않았고 그것이 나를 위해 작동하지 않았다.

추신 : 나는 당신이 지켜 볼 수있는 사이트에 처음 왔을뿐. 따라서 이것이 질문을하는 적절한 방법이 아니라고 생각하는 경우 포럼에서이 질문을 삭제하라는 메시지가 나오면 나는 질문하지 않을 것입니다.

답변

1
SELECT TableA.*, TableB.Attribute 
FROM TableA LEFT JOIN TableB ON TableA.PK = TableB.FK 

편집 : 방금 원래 질문을 더 자세히 읽고 나중에 당신이 겪은 것이 아니라는 것을 깨달았습니다. 이렇게하면 TableB에 관련 데이터가없는 경우 원하는 NULL 값이 제공되지만 주어진 TableA 레코드에 대해 TableB의 여러 관련 값을 한 행에 연결하려면 함수를 작성해야합니다. 새 모듈을 만들고 여기에 다음 함수를 추가하십시오. 여기서 PK 및 FK 열은 Long Integer이고 특성 값은 String이라고 가정합니다. 나는 또한 당신이 MS Access에서 일하고 있다고 가정하고 있습니다.

Public Function ListAttributes(lngPK As Long) As String 

    Dim rsAttributes As DAO.Recordset 
    Dim strResult as String 

    Set rsAttributes = CurrentDB.OpenRecordset("SELECT Attribute FROM TableB WHERE FK = " & lngPK) 
    Do While Not rsAttributes.EOF 
     strResult = strResult & ", " & rsAttributes!Attribute 
     rsAttributes.MoveNext 
    Loop 
    If strResult <> "" Then 
     strResult = Mid(strResult, 3) 
    End If 
    ListAttributes = strResult 
    Set rsAttributes = Nothing 

End Function 

귀하의 질의는된다 당신이 지금 대신 TableB의에 해당하는 행이없는 TableA의 행에 대한 NULL의 빈 문자열을 얻을 것이다,하지만 당신은 항상 IIf 기능을 사용할 수 있습니다

SELECT *, ListAttributes(PK) FROM TableA 

주 필요한 경우이 문제를 해결하기 위해 전화하십시오.

+1

당신이하고있는 일에 대한 설명을 추가하면 좋을 것입니다. – sds

+0

남자, 이것은 우수합니다. 나는 왼쪽에 시도해 보겠다.하지만 vb에 익숙하지 않은이 기능은 생명의 은인이다. 너의 도움이 인정된다. –

관련 문제