2017-10-17 1 views
0

내부 테이블이 다른 테이블의 ID와 3 개의 다른 ID를 조인하고 그 테이블의 이름 값을 내 테이블에 조인하는 쿼리를 작성해야합니다. 검색어를 선택하십시오. 좀 더 명확하게하려고 노력할 것입니다. 내 하나 개의 테이블에서내부 테이블에 여러 개의 ID 열이 여러 개의 이름 열을 표시하기 위해 결합합니다.

나는 아이디의 이러한 3 열이 :

Book_Sommerhuse.[BS_ID] 
:

Book_Kalender.BS_ID, 
Book_Kalender.BS_ID_Prio2, 
Book_Kalender.BS_ID_Prio3, 

는이 모든 이들 식별자와 관련된 이름을 포함하는 다른 테이블의 컬럼과 결합 내부해야

SELECT 쿼리에서 외부 테이블의 이름 열을 포함합니다. 대신 ID에 해당하는 관련 이름이있는 3 개의 열이 있어야합니다.

INNER JOIN Book_Kalender ON Book_Sommerhuse.[BS_ID] = Book_Kalender.[BS_ID] 
AND Book_Sommerhuse.[BS_ID] = Book_Kalender.[BS_ID_Prio2] 

그러나이 수익률과 내 선택 쿼리에서 빈보기 :

Book_Sommerhuse.BS_Navn 

지금까지 나는 AND 키워드를 사용하여 조인 내부 여러 만들기 위해 노력했다. 또한 ID와 관련된 각 이름에 대해 새 열을 만드는 방법을 잘 모르겠습니다.

전체 쿼리 : 당신은 3 왼쪽 필요

SELECT 
    Book_Kalender.BK_ID, 
    Book_Kalender.BK_DatoFra, 
    Book_Kalender.BK_DatoTil, 
    Book_Kalender.BK_M_Navn, 
    Book_Kalender.BK_M_Adr, 
    Book_Kalender.BK_M_PostBy, 
    Book_Kalender.BK_M_Afd, 
    Book_Kalender.BK_M_MedArbNr, 
    Book_Kalender.BK_M_Tlf, 
    Book_Kalender.BK_M_Email, 
    Book_Kalender.BK_Tidl_Lejet, 
    Book_Kalender.BK_Tidl_Lejet_Txt, 
    Book_Kalender.BS_ID, 
    Book_Kalender.BS_ID_Prio2, 
    Book_Kalender.BS_ID_Prio3,  
    A.BS_Navn as BS_Navn1, 
    B.BS_Navn as BS_Navn2, 
    c.BS_Navn as BS_Navn3, 
    coalesce(A.BS_Navn,B.BS_Navn,c.BS_Navn) as BS_Navn  
FROM 
    Book_Kalender 
    LEFT JOIN Book_Sommerhuse A ON 
     Book_Kalender.BS_ID  = A.BS_ID 
    LEFT JOIN Book_Sommerhuse B ON 
     Book_Kalender.BS_ID_Prio2 = B.BS_ID 
    LEFT JOIN Book_Sommerhuse C ON 
     Book_Kalender.BS_ID_Prio3 = C.BS_ID  
WHERE 
    Book_Kalender.BK_DatoFra BETWEEN #10/15/2017# AND #12/31/2018#; 
+0

Book_Kalender 테이블의 ID가 모두 동일한 이름이나 다른 이름을 참조합니까? –

+0

Book_Kalendar 테이블을 정규화해야한다고 생각합니다. 같은 테이블에있는 여러 열에 같은 것을 저장하고있을 때마다, 외래 키를 부모 테이블로 다시 가져 와서 해당 ID를 포함하는 하위 테이블을 작성해야합니다. – ADyson

+0

다른 ID이므로 Book_Sommerhuse 테이블에서 다른 이름을 참조합니다. – Leth

답변

2

가입 :

select 
    Book_Kalender.*, 
    A.BS_Navn as BS_Navn1, 
    B.BS_Navn as BS_Navn2, 
    C.BS_Navn as BS_Navn3, 
    coalesce(A.BS_Navn,B.BS_Navn,c.BS_Navn) as BS_Navn -- first non null BS_Navn 
from  
    Book_Kalender 
    LEFT JOIN Book_Sommerhuse A ON 
     Book_Kalender.BS_ID  = A.BS_ID 
    LEFT JOIN Book_Sommerhuse B ON 
     Book_Kalender.BS_ID_Prio2 = B.BS_ID 
    LEFT JOIN Book_Sommerhuse C ON 
     Book_Kalender.BS_ID_Prio3 = C.BS_ID 
+0

감사합니다. 코드를 구현하려고하는데 Book_Kalender와 관련하여 누락 된 연산자 오류가 발생합니다. [BS_ID] = B. [BS_ID_Prio2] – Leth

+0

열 이름을 확인하고 대괄호를 제거 할 수 있습니다 – Indent

+0

아직 받고 있습니다. 같은 오류. 원래 게시물에 전체 쿼리를 추가했습니다. 열 이름에서 대괄호를 제거했습니다. – Leth

0
SELECT 
    K.BS_ID 
    ,S1.BS_Navn 
    ,K.BS_ID_Prio2 
    ,S2.BS_Navn 'Prio2_BS_Navn' 
    ,K.BS_ID_Prio3 
    ,S3.BS_Navn 'Prio3_BS_Navn' 
FROM 
    Book_Kalender K 
LEFT JOIN 
    Book_Sommerhuse S1 ON S1.BS_ID = K.BS_ID 
LEFT JOIN 
    Book_Sommerhuse S2 ON S2.BS_ID = K.BS_ID_Prio2 
LEFT JOIN 
    Book_Sommerhuse S3 ON S3.BS_ID = K.BS_ID_Prio3 
+0

MS Access를 사용하여이 쿼리를 실행하기 때문에 구문이 약간 다릅니다.내 게시물에서 그게 분명하지 않은 것에 대해 미안합니다. 이해할 수 있듯이 첫 번째 조인 절을 괄호로 묶어 논리적으로 다른 조인과 분리해야하지만 여전히 "누락 된 연산자"오류가 발생합니다. – Leth

0

사용할 수있는 하나의 컬럼으로 당신에게 세 개의 컬럼 데이터를 제공 할 수있는 파생 테이블을 사용하고 다음 수 이 같은 신청을 신청하십시오.

INNER JOIN (
       SELECT BS_IDs FROM Book_Kalender CROSS APPLY(
       VALUES (BS_ID), (BS_ID_Prio2), (BS_ID_Prio3)) Cols(BS_IDs) 
      ) DerivedBook_Kalender ON Book_Sommerhuse.[BS_ID] = DerivedBook_Kalender.[BS_IDs] 
관련 문제