【发布时间】:2018-04-14 00:52:37
【问题描述】:
这些是我创建的表
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 值?
【问题讨论】:
-
你能提供一些样本数据并期待结果吗?看起来可以等于
ON A.ProjectID = E.EmployeeNumber的那些表 -
我希望 FirstName 和 lastName 列不为空。我在这些列中插入了数据。所以我希望它们不为 NULL。我不确定你要我提供什么
-
我的意思是您可以向我们展示来自
PROJECT和ASSIGNMENT表的一些数据。真的很有帮助 -
好的,我更新了
标签: sql sql-server join left-join