2014-04-23 1 views
0

나는 내가 참여하려고하는 몇 가지 테이블을 가지고있다.바깥 쪽 조인은 원하는 결과를 제공하지 않음

CREATE TABLE BRANCH(
BranchID  Int  NOT NULL, 
Street   Char(50) NOT NULL, 
City   Char(30) NOT NULL, 
Postcode  Char(10) NOT NULL, 
TelephoneNumber  Int  NOT NULL, 
ManagerName  VarChar(40) NOT NULL, 
CONSTRAINT  BRANCH_PK PRIMARY KEY(BranchID) 
); 

CREATE TABLE STAFF(
StaffID   Int  NOT NULL, 
BranchID  Int  NULL, 
Name   VarChar(40) NOT NULL, 
Street   Char(50) NOT NULL, 
City   Char(30) NOT NULL, 
Postcode  Char(10) NOT NULL, 
Position  Char(15) NOT NULL, 
Salary   Decimal(6,2) NOT NULL, 
StartingDate  Date  NOT NULL, 
CONSTRAINT  STAFF_PK PRIMARY KEY(StaffID), 
CONSTRAINT  STAFF_BRANCH_FK FOREIGN KEY (BranchID) 
         REFERENCES BRANCH(BranchID) 
); 

가 나는 그것이 BranchID 행을 사용하여 함께 두 개의 테이블을 조인 할 수 있다는 희망에 참여를 작성한 다음과 같습니다 :

SELECT STAFF.Name 
    ,STAFF.Position 
    ,BRANCH.BranchID 
FROM STAFF 
FULL OUTER JOIN BRANCH 
    ON STAFF.BranchID = BRANCH.BranchID 
ORDER BY STAFF.Name; 

을 조인하지 않습니다 여기에 문제의 두 테이블은

NAME          POSITION   BRANCHID 
---------------------------------------- --------------- ---------- 
Anna Jones        Supervisor 
Colin Stevens       Assistant 
Jack Butler        Supervisor 
John Walters        Assistant 
Mary Johnson        Assistant 
                   8000 
                   6017 
                   6016 
                   6015 
                   8001 

branchID의는 관련 직원 이름에 할당되지 않는 것을 문제를 : 나는 것 희망 다음과 같은 형식으로 값을 표시 줄로 작동합니다. 어떻게 든 이것을 할 수 있습니까? branchID는 Staff 이름과 위치와 같은 행에 나타납니다. 모든 지침은 크게 감사하겠습니다.

+2

는'BranchID' NULL의 경우 :

는 BranchID 이상 어떤 경기를 모두 테이블에서 행만을 얻을 대신 다음 쿼리를 시도? – Arion

+0

입력 데이터가 없어도 출력을 분석하기가 어렵습니다. – Guneli

+0

오, 죄송합니다. 도움이된다면 각 테이블에 넣은 것을 보여줄 수 있습니까? 그리고 네, 그것은 null입니다, 그게 문제입니까? – eggman

답변

0

FULL OUTER JOIN은 조인 조건이 만족되는지 여부에 관계없이 두 테이블에서 모두 행을 가져옵니다. 당신은 아래의 정보를 얻기 위해 INNER JOIN를 사용할 수 있습니다

SELECT STAFF.Name 
    ,STAFF.Position 
    ,BRANCH.BranchID 
FROM STAFF 
INNER JOIN BRANCH 
    ON STAFF.BranchID = BRANCH.BranchID 
ORDER BY STAFF.Name; 

그러나, 또한 데이터가 정확하지 않은 것 같습니다. STAFF.BranchIDNULL 인 것으로 보입니다.

+0

문제는 더 큰 결과로 데이터를 변경 한 후에 staff.branchID가 null 인 데이터와 관련되어있었습니다. 이제는 위와 같이 조인을 사용했습니다. 고맙습니다. – eggman

0

FULL OUTER JOIN 키워드는 왼쪽 테이블 (귀하의 경우 STAFF)과 오른쪽 테이블 (귀하의 경우 BRANCH)의 모든 행을 반환합니다.

실제 결과는 BranchID를 통한 조인과 일치하는 행이없는 것 같습니다.

FULL OUTER JOIN이 필요합니까? 은`STAFF` 테이블에

SELECT 
    STAFF.Name 
    ,STAFF.Position 
    ,BRANCH.BranchID 

FROM 
    STAFF JOIN BRANCH ON STAFF.BranchID = BRANCH.BranchID 

ORDER BY 
    STAFF.Name