![](/img/trans.png)
[英]Joining two tables and producing results only on one table when there are null values on joining column
[英]When joining two tables with SQL, I get null values for two of my columns in the results
这些是我创建的表
CREATE TABLE PROJECT
(
ProjectID Int NOT NULL IDENTITY (1000, 100),
ProjectName Char(50) NOT NULL,
Department Char(35) NOT NULL,
MaxHours Numeric(8,2) NOT NULL DEFAULT 100,
StartDate DateTime NULL,
EndDate DateTime NULL,
CONSTRAINT PROJECT_PK PRIMARY KEY (ProjectID),
CONSTRAINT PROJ_DEPART_FK FOREIGN KEY(Department)
REFERENCES DEPARTMENT(DepartmentName)
ON UPDATE CASCADE
);
CREATE TABLE ASSIGNMENT
(
ProjectID Int NOT NULL,
EmployeeNumber Int NOT NULL,
HoursWorked Numeric(6,2) NULL,
CONSTRAINT ASSIGNMENT_PK PRIMARY KEY (ProjectID, EmployeeNumber),
CONSTRAINT ASSIGN_PROJ_FK FOREIGN KEY (ProjectID)
REFERENCES PROJECT (ProjectID)
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT ASSIGN_EMP_FK FOREIGN KEY (EmployeeNumber)
REFERENCES EMPLOYEE (EmployeeNumber)
ON UPDATE NO ACTION
ON DELETE NO ACTION
);
这是我正在运行的查询
SELECT
A.ProjectID, E.FirstName, E.LastName, A.HoursWorked
FROM
ASSIGNMENT A
LEFT JOIN
EMPLOYEE E ON A.ProjectID = E.EmployeeNumber
这是我得到的结果
ProjectID FirstName LastName HoursWorked
------------------------------------------------
1000 NULL NULL 30.00
1000 NULL NULL 65.00
1000 NULL NULL 55.00
1100 NULL NULL 40.00
1100 NULL NULL 45.00
1200 NULL NULL 25.00
1200 NULL NULL 20.00
1200 NULL NULL 45.00
1200 NULL NULL 40.00
1300 NULL NULL 35.00
1300 NULL NULL 50.00
1400 NULL NULL 15.00
1400 NULL NULL 10.00
1400 NULL NULL 27.50
插入的数据
/***** PROJECT DATA *********************************************************/
INSERT INTO PROJECT VALUES(
'2010 Q3 Product Plan', 'Marketing', 135.00, '10-MAY-10', '15-JUN-10');
INSERT INTO PROJECT VALUES(
'2010 Q3 Portfolio Analysis', 'Finance', 120.00, '05-JUL-10', '05-JUL-10' );
INSERT INTO PROJECT VALUES(
'2010 Q3 Tax Preparation', 'Accounting', 145.00, '10-AUG-10', '15-OCT-10');
INSERT INTO PROJECT VALUES(
'2010 Q4 Product Plan', 'Marketing', 150.00, '10-AUG-10', '15-SEP-10');
INSERT INTO PROJECT (ProjectName, Department, MaxHours, StartDate)
VALUES(
'2010 Q4 Portfolio Analysis', 'Finance', 140.00, '05-OCT-10');
/***** ASSIGNMENT DATA ******************************************************/
INSERT INTO ASSIGNMENT VALUES(1000, 1, 30.0);
INSERT INTO ASSIGNMENT VALUES(1000, 8, 75.0);
INSERT INTO ASSIGNMENT VALUES(1000, 10, 55.0);
INSERT INTO ASSIGNMENT VALUES(1100, 4, 40.0);
INSERT INTO ASSIGNMENT VALUES(1100, 6, 45.0);
INSERT INTO ASSIGNMENT VALUES(1200, 1, 25.0);
INSERT INTO ASSIGNMENT VALUES(1200, 2, 20.0);
INSERT INTO ASSIGNMENT VALUES(1200, 4, 45.0);
INSERT INTO ASSIGNMENT VALUES(1200, 5, 40.0);
INSERT INTO ASSIGNMENT VALUES(1300, 1, 35.0);
INSERT INTO ASSIGNMENT VALUES(1300, 8, 80.0);
INSERT INTO ASSIGNMENT VALUES(1300, 10, 50.0);
INSERT INTO ASSIGNMENT VALUES(1400, 4, 15.0);
INSERT INTO ASSIGNMENT VALUES(1400, 5, 10.0);
INSERT INTO ASSIGNMENT VALUES(1400, 6, 27.5);
当我仅对名字和姓氏列运行查询时,所有名称都显示出来并且绝对不为空。 我对JOIN语句缺乏经验,因此无法确定这是否正确。 我尝试使用“ RiGHT JOIN”,但这使其他两列为NULL,而不是名和姓列。 如何使结果显示时根本没有任何NULL值?
您正在加入项目ID和员工编号。 那没有道理。
一个明智的查询是:
SELECT A.ProjectID, P.ProjectName, P.Department, A.HoursWorked
FROM ASSIGNMENT A
PROJECT P
ON A.ProjectID = P.ProjectId;
如果需要有关雇员的信息,则需要一个EMPLOYEE
表。 然后这样的事情会起作用:
SELECT A.ProjectID, E.FirstName, E.LastName, A.HoursWorked
FROM ASSIGNMENT A LEFT JOIN
EMPLOYEE E
ON A.EmployeeNumber = E.EmployeeNumber
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.