我有几张桌子,我想加入。以下是两个有问题的表:
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就会出现在与员工姓名和职位相同的行中。任何指导都将不胜感激。
答案 0 :(得分: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.BranchID
似乎是NULL
。
答案 1 :(得分:0)
FULL OUTER JOIN
关键字会返回左表中的所有行(在您的情况下为STAFF
)和右表(在您的情况下为BRANCH
)。
您的实际结果看起来与您在BranchID上的联接没有匹配的行。
为什么你需要FULL OUTER JOIN
?
尝试使用以下查询来仅获取两个表中与BranchID匹配的行:
SELECT
STAFF.Name
,STAFF.Position
,BRANCH.BranchID
FROM
STAFF JOIN BRANCH ON STAFF.BranchID = BRANCH.BranchID
ORDER BY
STAFF.Name